c++ - How to change string in multimap -


मेरे पास बहुमूल्य है:

  multimap & lt; स्ट्रिंग, वेक्टर & lt; ऑब्जेक्ट & gt; & Gt; myMultimap;   

और मुझे उस मल्टीमैप के हिस्से में स्ट्रिंग बदलने की आवश्यकता है जो पहले से ही बनाई गई है।

इसे- & gt; पहली = नई स्ट्रिंग;

काम नहीं करता ....

यदि आपको उस कुंजी के साथ सभी तत्वों की चाबियाँ "बदल" करने की आवश्यकता है:

  टेम्पलेट & lt; typename key, typename ValueType, typename तुलना करें, typename allocator, typename की, टाइपनाम से टू & gt; ऑटो change_key (std :: multimap & lt; कुंजी, वैल्यू टाइप, तुलना, आवंटन & gt; एंड एम, से ककी कॉन्स्ट एंड amp; from_raw, Tokey const और amp; to_raw) - & gt; Typename std :: multimap & lt; कुंजी, मान टाईप, तुलना, आवंटन & gt; :: इटरेटर {कुंजी संधि & amp; से = to_raw; // केवल एक बार कन्वर्ट, प्रत्येक चलना में नहीं मुख्य const & amp; के लिए = to_raw; ऑटो संकेत = m.lower_bound (to); ऑटो const itsFrom = m.equal_range (से); के लिए (स्वतः कर = itsFrom.first; cur! = ItsFrom.second; ++ cur) {संकेत = m.emplace_hint (संकेत, के लिए, std :: चाल (cur- & gt; दूसरा)); } एम.रेज़ (इसकीफ्रम.पहले, इसकीफ्रम.सेकंड); वापसी संकेत; }   

सी ++ 1 में, यदि तुलना फ़ंक्शन ऑब्जेक्ट पारदर्शी है, तो आप स्पष्ट कोड को से और से < कोड>।

मुझे पूरा यकीन नहीं है कि अगर मैंने संकेत के रूप में lower_bound सही तरीके से उपयोग किया है; मानक (n3797) संकेत 102 के बारे में संकेत के बारे में निम्नलिखित कहते हैं - एसोसिएटिव कंटेनर आवश्यकताओं (कंटेनर के अतिरिक्त):

तत्व के करीब के रूप में डाला जाता है संभवतः p से पहले की स्थिति के लिए संभव है।

और जटिलता:

सामान्य रूप से लॉगरिदमिक, लेकिन निरंतर निरंतर अगर तत्व p

से पहले सही डाला जाता है, इसलिए हमें अपनी प्रविष्टि बिंदु के बाद की स्थिति चाहिए; मुझे यकीन नहीं है कि प्रविष्टि बिंदु स्वयं एक उपयोगी संकेत है। मुझे करने के लिए, यह ऊपरी_बाउंड का उपयोग करने का सुझाव देने लगता है, क्योंकि वह खोज की गई कुंजी से अधिक महत्वपूर्ण कुंजी के साथ हमेशा स्थिति लौटाता है; दूसरी ओर मैं उन उत्तरों को खोजते रहती हूं जो लोअर_बाउंड का उपयोग करने का सुझाव देते हैं।

उपयोग का उदाहरण:

  #include & lt; map & gt; ; #include & lt; vector & gt; # शामिल करें & lt; iostream & gt; #include & lt; स्ट्रिंग & gt; संरचना वस्तु {int m; }; std :: ostream & amp; ऑपरेटर & lt; & lt; (std :: ostream & amp; o, वस्तु const & amp; पी) {वापसी ओ एंड एलटी; & lt; सायं; } टेम्पलेट & lt; typename V & gt; std :: ostream & amp; ऑपरेटर & lt; & lt; (std :: ostream & amp; o, std :: vector & lt; v & gt; const & amp; v) {के लिए (ऑटो const & amp; e: v) o & lt; & lt; ई; वापसी ओ; } टेम्पलेट & lt; typename K, typename V & gt; std :: ostream & amp; ऑपरेटर & lt; & lt; (std :: ostream & amp; o, std :: multimap & lt; के, वी & gt; const & amp; amp; एम) {for (ऑटो const & amp; p: m) o & lt; & lt; "[" & Lt; & lt; p.first & lt; & lt; ":" & lt; & lt; p.second & lt; & lt; "],"; वापसी ओ; } Int main () {auto make_vector = [] (int p) {return std :: vector & lt; object & gt; {{p}}; }; Std :: multimap & lt; std :: स्ट्रिंग, std :: vector & lt; ऑब्जेक्ट & gt; & gt; MyMultimap = {{{"{1}", मेक_वेक्टर (0)}, {"प्रथम", मेक_वेक्टर (1)}, {"प्रथम", मेक _वेक्टर (2)}, {"2", मेक _वेक्टर (3)}, 2 ", मेक-वेक्टर (4)}, {" सेकंड ", मैक_वेक्टर (5)}, {" तीसरा ", मेक-एवेक्टर (6)}, {" तीसरा ", मेक-डेक्टर (7)}, {" 3 ", मेक-आइएक्टर (8 )}}}; Std :: cout & lt; & lt; myMultimap; Change_key (myMultimap, "2", "4 था"); Std :: cout & lt; & lt; "\ N \ n" & lt; & lt; myMultimap; }    

Comments

Popular posts from this blog

c - Mpirun hangs when mpi send and recieve is put in a loop -

python - Apply coupon to a customer's subscription based on non-stripe related actions on the site -

java - Unable to get JDBC connection in Spring application to MySQL -