2012-04-06 15 views
32

मैं एक एसटीएल मानचित्र से एक कुंजी को हटाना चाहता हूं। हालांकि, map.erase() कुछ भी नहीं करता है। मैं यहसी ++ मानचित्र से एक कुंजी निकालें

+11

मिटा कुछ करता है। आप इसका उपयोग कैसे कर रहे हैं? और आपको क्या विश्वास है कि यह कुछ भी नहीं कर रहा है? –

+1

map.erase (कुंजी)। –

+3

और मेरे दूसरे प्रश्न के लिए? –

उत्तर

50

करने के बारे में कैसे जाउंगा यह पूरी तरह से निर्भर करता है कि आप इसे कैसे कॉल कर रहे हैं लेकिन ऐसा लगता है कि आप first,last विकल्प का उपयोग कर रहे हैं। यदि आप हैं, तो आपको यह ध्यान रखना होगा कि यह first से शुरू होने वाले तत्वों को मिटा दें, last को छोड़कर। बशर्ते आप उस नियम का पालन करें, इटेटर-आधारित हटाने को ठीक से काम करना चाहिए, या तो एक तत्व या सीमा के रूप में।

यदि आप कुंजी से मिट रहे हैं, तो यह भी काम करना चाहिए, मान लीजिए कि कुंजी निश्चित रूप से वहां है। जो आउटपुट

#include <iostream> 
#include <map> 

int main (void) { 
    std::map<char,char> mymap; 
    std::map<char,char>::iterator it; 

    mymap['a'] = 'A'; mymap['b'] = 'B'; mymap['c'] = 'C'; 
    mymap['d'] = 'D'; mymap['e'] = 'E'; mymap['f'] = 'F'; 
    mymap['g'] = 'G'; mymap['h'] = 'H'; mymap['i'] = 'I'; 

    it = mymap.find ('b');    // by iterator (b), leaves acdefghi. 
    mymap.erase (it); 

    it = mymap.find ('e');    // by range (e-i), leaves acd. 
    mymap.erase (it, mymap.end()); 

    mymap.erase ('a');     // by key (a), leaves cd. 

    mymap.erase ('z');     // invalid key (none), leaves cd. 

    for (it = mymap.begin(); it != mymap.end(); it++) 
     std::cout << (*it).first << " => " << (*it).second << '\n'; 

    return 0; 
} 

:

निम्नलिखित नमूना कोड कार्रवाई में तीनों विधियों से पता चलता

c => C 
d => D 
+0

मुझे 'const key_type' 'के लिए ओवरराइड याद करने के लिए बहुत मूर्ख लगता है। इस पर ध्यान दिलाने के लिए धन्यवाद! –

4

आप करना होगा इटरेटर लगता है पहले

map.erase(ITERATOR) ; 

करने के लिए इसे सुरक्षित बनाएं, आपको यह सुनिश्चित करना होगा कि ITERAT या, हालांकि, मौजूद है। उदाहरण उदाहरण:

#include <stdio.h> 
#include <map> 
using namespace std ; 

int main() 
{ 
    map<int,int> m ; 
    m.insert(make_pair(1,1)) ; 
    map<int,int>::iterator iter = m.find(1) ; 
    if(iter != m.end()) 
    m.erase(iter); 
    else puts("not found") ; 

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