मैं एक std :: map की सामग्री को दूसरे में कॉपी करना चाहता हूं। क्या मैं इसके लिए std::copy
का उपयोग कर सकता हूं? जाहिर है, निम्नलिखित कोड काम नहीं करेगा:मैं std :: copy का उपयोग करके एक मानचित्र को दूसरे में कैसे कॉपी कर सकता हूं?
int main() {
typedef std::map<int,double> Map;
Map m1;
m1[3] = 0.3;
m1[5] = 0.5;
Map m2;
m2[1] = 0.1;
std::copy(m1.begin(), m1.end(), m2.begin());
return 0;
}
यह काम नहीं करेगा क्योंकि copy
m2.begin()
पर operator*
कॉल "भिन्नता" यह और एक मूल्य निर्दिष्ट (सभी मूल्यों प्रकार std::pair<const int, double>
के हैं) होगा। फिर यह में अगली जगह पर जाने के लिए operator++
पर कॉल करेगा। में const
की वजह से ये दोनों ऑपरेशन काम नहीं करते हैं और किसी भी नए तत्व के लिए आरक्षित कोई स्थान नहीं है।
क्या यह std::copy
के साथ काम करने का कोई तरीका है?
धन्यवाद!
std::copy(m1.begin(), m1.end(), std::inserter(m2, m2.end()));
inserter
<iterator>
में परिभाषित किया गया है:
+1 वास्तव में, बहुत साफ है। – GManNickG
ठीक है, अगर आप std :: प्रतिलिपि का उपयोग करने से बचने वाले हैं, तो क्यों न केवल कॉपी c'tor का उपयोग करें? एम 2 = एम 1। संपादित करें: आह, वह मूल्यों का संघ चाहता है। – Stephen
@ स्टीफन: क्योंकि 'डालने' का उपयोग करके 'm2' के अंदर मौजूदा सामग्री को संरक्षित करता है। प्रतिलिपि * असाइनमेंट * ऑपरेटर का उपयोग मौजूदा सामग्री को 'm2' के अंदर नष्ट कर देता है। –