2014-09-04 5 views
6

answersstd::vector के साथ बहुत सारे हैं, लेकिन std::unordered_set के बारे में क्या है?क्या स्पष्ट() std :: unordered_set की बाल्टी गिनती को प्रभावित करता है?

मेरा वास्तविक प्रश्न (निकट से संबंधित) यह है; क्या प्रत्येक समान उपयोग से पहले इसे साफ़ करके उसी असाधारण सेट का पुन: उपयोग करना कुशल है, अगर मैं आरक्षित करता हूं जो मुझे पहले से उचित आकार के रूप में जाना जाता है?

+1

मैं कहूंगा कि यह कार्यान्वयन विशिष्ट होगा। मानक केवल निर्दिष्ट करता है कि 'स्पष्ट()' कंटेनर में सभी तत्वों को मिटा देता है। –

+1

मुझे लगता है कि [वही तर्क 'std :: vector :: reserve'] के लिए लागू होता है (http://stackoverflow.com/a/18467916): 'bucket_count' अवलोकन योग्य राज्य का हिस्सा है; इसे सम्मिलन में बदलने की अनुमति है, लेकिन इसे 'रिहाश' या 'रिजर्व' (या यहां तक ​​कि 'मिटाएं' पर भी बदलने की अनुमति नहीं है, जहां तक ​​मैं देख सकता हूं ..)। – dyp

+0

@dyp: आपने मुझे खो दिया है ... "' bucket_count' ... स्पष्ट रूप से 'रिहाश' या 'रिजर्व' पर बदलने की अनुमति नहीं है - बाद में बाल्टी की संख्या (इस प्रकार 'bucket_count()') संशोधित करने के लिए - पूर्व सीधे बाल्टी की एक नई संख्या स्वीकार करता है (लेकिन 'आकार()/max_load_factor()' सैनिटी चेक) के अधीन है और बाद वाले इसे कई अनुमानित तत्वों और वर्तमान 'max_load_factor' से प्राप्त करता है। "स्पष्ट" या नहीं, वे यही करते हैं। –

उत्तर

6

औपचारिक उत्तर यह है: यह कार्यान्वयन पर निर्भर करता है।

अनौपचारिक जवाब है: unordered_set अंदर बाल्टियों की (किसी तरह का) एक सरणी है, और सबसे अधिक संभावना कार्यान्वयन vector के साथ संगत है, इसलिए जब clear() कहा जाता है इस सरणी को हटाया नहीं जाएगा। तो clear() पर कॉल करने से अधिकतर कुछ लाभ मिलेगा।

+0

धन्यवाद, जोनाथन पॉटर के जवाब के साथ; यह जानना अच्छा है कि यह निर्दिष्ट नहीं है। प्रत्येक उपयोग से पहले 'आरक्षित' का उपयोग करना पहले से ही प्रदर्शन में लाभ है। – Sheljohn

संबंधित मुद्दे