2010-01-08 7 views
5

मैं मानचित्र में एक ही कुंजी को कई बार डालने की कोशिश कर रहा हूं लेकिन विभिन्न मानों के साथ। यह काम नहीं करता है। मुझे पता है कि ऑपरेटर [] यह काम करता है, लेकिन मेरा सवाल यह है कि यदि सम्मिलन का यह व्यवहार सही है? सम्मिलित नहीं करना चाहिए() आवेषण? मुझे आश्चर्य है कि मानक क्या कहता है। दुर्भाग्यवश मेरे पास यह नहीं है (सी ++ के लिए मानक) इसलिए मैं जांच नहीं कर सकता।
सहायक उत्तरदाताओं के लिए धन्यवाद।std :: map से क्यों सम्मिलित करना अपडेट नहीं करना चाहते हैं? [सी ++]

उत्तर

14

आप विभिन्न मूल्यों के साथ एक ही कुंजी सम्मिलित करना चाहते हैं, तो , आपको इसके बजाय std::multimap की आवश्यकता है।

std::map::insert कुछ भी नहीं करेगा यदि कुंजी पहले से मौजूद है। std::map::operator[] पुराने मान को ओवरराइट करेगा।

एसटीएल संदर्भ के लिए आपको सी ++ मानक की आवश्यकता नहीं है; http://www.cplusplus.com/reference/ जैसे कुछ भी करेंगे।

+0

धन्यवाद। और क्योंकि मेरे पास कम से कम 15 char होना है, मैं इस पाठ को टाइप कर रहा हूं। –

5

मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं, लेकिन ऐसा लगता है कि आप मानचित्र में अपनी पिछली प्रविष्टियों को ओवरराइट कर रहे हैं; map केवल एक मूल्य प्रति कुंजी स्टोर करता है।

इसके बजाय, आपको multi_map का उपयोग करने की आवश्यकता होगी। यह आपको अलग-अलग मानों के साथ एक ही कुंजी डालने की अनुमति देगा। आप इस तरह operator[] खो देते हैं, क्योंकि यह वास्तव में समझ में नहीं आता है। (। करते हैं, तो सुनिश्चित करें कि डालने, लेकिन यह है कि ऑपरेटर भी पुन: प्राप्त करता कौन सा मूल्य इसे पुनः प्राप्त करना चाहिए?)

यहाँ एक उदाहरण (here से संशोधित) है:

#include <iostream> 
#include <map> 

int main(void) 
{ 
    std::multimap<std::string, int> m; 

    m.insert(std::make_pair("a", 1)); 
    m.insert(std::make_pair("b", 2)); 
    m.insert(std::make_pair("c", 3)); 
    m.insert(std::make_pair("a", 4)); 
    m.insert(std::make_pair("b", 5)); 
    m.insert(std::make_pair("a", 6)); 

    std::cout << "Number of elements with key a: " << m.count("a") << endl; 
    std::cout << "Number of elements with key b: " << m.count("b") << endl; 
    std::cout << "Number of elements with key c: " << m.count("c") << endl; 

    std::cout << "Elements in m: " << endl; 
    for (m::iterator it = m.begin(); it != m.end(); ++it) 
    { 
     std::cout << " [" << it->first << ", " << it->second << "]" << endl; 
    } 
} 
संबंधित मुद्दे