2010-10-17 37 views
15
#include <map> 

... 

multimap<char,int> first; 

first.insert(pair<char,int>('a',10)); 
first.insert(pair<char,int>('b',15)); 
first.insert(pair<char,int>('b',20)); 
first.insert(pair<char,int>('c',25)); 

Giả sử bây giờ tôi muốn xóa một trong các cặp mà tôi vừa thêm vào bản đồ.Làm thế nào để loại bỏ một cặp cụ thể khỏi một bội số C++?

Tôi có các ví dụ để xóa toàn bộ mục nhập khóa, cho khóa 'b' sẽ xóa cả 'b', 15 và 'b', 20.

Nhưng mã để loại bỏ chỉ, ví dụ: cặp 'b', 20?

Trả lời

27

Bạn có thể sử dụng std::multimap<char, int>::equal_range, công cụ này sẽ cung cấp cho bạn phạm vi trình lặp có chứa tất cả các cặp có khóa nhất định. Vì vậy, nếu bạn tìm kiếm 'b', bạn sẽ nhận được một dãy vòng lặp chứa tất cả các cặp có 'b' làm khóa.

Sau đó bạn có thể chỉ cần lặp qua phạm vi và xóa bất kỳ cặp nào bạn thấy phù hợp, bằng cách xóa trình lặp.

multimap<char,int> mymap; 

mymap.insert(pair<char,int>('a',10)); 
mymap.insert(pair<char,int>('b',15)); 
mymap.insert(pair<char,int>('b',20)); 
mymap.insert(pair<char,int>('c',25)); 

typedef multimap<char, int>::iterator iterator; 
std::pair<iterator, iterator> iterpair = mymap.equal_range('b'); 

// Erase (b,15) pair 
// 
iterator it = iterpair.first; 
for (; it != iterpair.second; ++it) { 
    if (it->second == 15) { 
     mymap.erase(it); 
     break; 
    } 
} 
+0

Cảm ơn rất nhiều Charles và cũng cho đoạn mã. –

+1

Cảm ơn vì điều này! Cũng lưu ý rằng có thể có nhiều hơn một cặp có giá trị và giá trị khớp chính xác (ví dụ: nhiều cặp ('b', 15)), vì vậy bạn có thể không muốn phá vỡ sau khi chỉ tìm thấy lần truy cập đầu tiên. Cũng lưu ý rằng với multimap, dường như hàm delete() không làm mất hiệu lực các trình vòng lặp khác (ngoại trừ trình lặp đã xóa), vì vậy bạn có thể tiếp tục lặp lại (hoặc ít nhất đó là những gì tôi thu thập từ trang này: http: //www.cplusplus .com/reference/map/multimap/erase /) –

+2

Bạn có thể tiếp tục lặp lại có, nhưng trình vòng lặp đã xóa thực sự bị vô hiệu, vì vậy trước tiên bạn cần truy xuất một trình lặp đến phần tử tiếp theo. –

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