2012-04-06 49 views
32

Tôi muốn xóa khóa khỏi bản đồ STL. Tuy nhiên, map.erase() không làm gì cả. Tôi sẽ làm như thế nào để thực hiện điều nàyXóa khóa khỏi bản đồ C++

+11

Xóa làm điều gì đó. Bạn sử dụng nó như thế nào? Và điều gì khiến bạn tin rằng nó không làm gì? –

+1

map.erase (khóa). –

+3

Và câu hỏi thứ hai của tôi? –

Trả lời

50

Nó phụ thuộc hoàn toàn vào cách bạn đang gọi nhưng có vẻ như bạn đang sử dụng tùy chọn first,last. Nếu bạn đang có, bạn cần phải ghi nhớ rằng nó xóa các yếu tố bắt đầu từ first, tối đa nhưng không bao gồmlast. Miễn là bạn tuân theo quy tắc đó, việc loại bỏ dựa trên vòng lặp sẽ hoạt động tốt, hoặc là một phần tử đơn lẻ hoặc một phạm vi.

Nếu bạn đang xóa bằng khóa, sau đó nó cũng sẽ hoạt động, giả sử là chìa khóa trong đó tất nhiên.

Mẫu mã sau đây cho thấy cả ba phương pháp trong hành động:

#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; 
} 

mà kết quả đầu ra:

c => C 
d => D 
+0

Tôi cảm thấy rất câm vì thiếu ghi đè cho 'const key_type &'. Cảm ơn đã chỉ ra điều đó! –

4

Bạn sẽ phải tìm ra iterator đầu tiên

map.erase(ITERATOR) ; 

Để làm cho điều này an toàn, bạn cần đảm bảo rằng ITERAT HOẶC tồn tại, tuy nhiên. Ví dụ mẫu:

#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") ; 

} 
Các vấn đề liên quan