2017-06-22 12 views
5

std::unordered_map<K, V> का सामान्य लेआउट क्या है? क्या K और V ऑब्जेक्ट्स बाल्टी में स्वयं संग्रहित हैं, या बाल्टी स्टोर पॉइंटर्स को कुंजी और मान वाले नोड्स में करते हैं?सी ++: std :: unordered_map नोड-आधारित होने की गारंटी है?

मैं std::unordered_map<K, V> बनाम std::unordered_map<K, V*> का उपयोग करने के प्रदर्शन प्रभावों को समझने की कोशिश कर रहा हूं। मान लीजिए कि मैं कभी भी प्रतिस्थापन और मूल्यों को देखता हूं, क्या बाद वाले को पसंद करने का कोई कारण है, भले ही मूल्य काफी बड़े हों? एकमात्र कारण मैं कल्पना कर सकता हूं कि यदि मूल्य बाल्टी में ऑनलाइन संग्रहीत किया जाता है, और कंटेनर को फिर से दबाए जाने पर हर बार फिर से आवंटित करने की आवश्यकता होती है।

क्या मानक में कुछ भी है जो गारंटी देता है कि ऐसा नहीं होगा?

+3

वे नोड आधारित हैं। सी ++ 17 नोड हैंडल का खुलासा भी करता है। –

उत्तर

12

[unord.req]/8:

rehashing को अमान्य कर iterators,, और परिवर्तन जो बाल्टियाँ तत्वों में दिखाई देते हैं, लेकिन संकेत या तत्वों के लिए संदर्भ को अमान्य नहीं है तत्वों के बीच आदेश देने बदल जाता है।

तथ्य यह है कि संकेत और तत्वों के लिए संदर्भ rehashing द्वारा अवैध नहीं कर रहे हैं (या प्रविष्टि/विलोपन,/13 देखें) बहुत बहुत मायने रखता है नोड आधारित होना जरूरी है कि वे।

सी ++ 17 नोड हैंडल का भी खुलासा करता है ताकि आप दो unordered_map एस के बीच नोड्स को स्थानांतरित कर सकें।

+0

धन्यवाद! यही वह है जिसकी तलाश में मैं हूं। – jacobsa

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