Jim*_*ler 20 c++ containers multimap
#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));
Run Code Online (Sandbox Code Playgroud)
说我现在想要删除我刚刚添加到地图中的一对.
我有一些例子来删除整个密钥条目,对于密钥'b',它将删除'b',15和'b',20.
但是,删除的代码是什么,比如,'b',20?
Cha*_*via 35
您可以使用std::multimap<char, int>::equal_range,它将为您提供包含具有特定键的所有对的迭代器范围.因此,如果你查找'b',你将获得一个迭代器范围,其中包含所有以'b'为关键字的对.
然后,您可以通过擦除迭代器简单地遍历范围,并擦除您认为合适的任何对.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要在第一次匹配后继续迭代,则需要首先检索下一个元素的迭代器,因为擦除的迭代器会失效。
从 C++11 开始,实现此目的的一种方法是使用擦除函数的返回值,该函数是最后一个被删除元素后面的元素的迭代器(或者 multimap::end,如果最后一个元素被删除) 。请注意,基于键的版本返回删除的元素数量,而不是迭代器。
基于 Charles Salvia 的宝贵答案,展示了如何擦除 (b,15 ) 对,您会得到
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; ) {
if (it->second == 15) {
it=mymap.erase(it);
}
else
++it;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13262 次 |
| 最近记录: |