Multimap -想知道.erase()函数
Multimap - wondering about .erase() function
我正在通过查看示例和现有练习来练习我的multimaps,我现在很困惑。谁能告诉我这里被myMap.erase(iter->second)擦除的是什么?
multimap<int, int> myMap;
for (int i = 0; i < 3; i += 2)
myMap.insert(make_pair(i + 1, i * 2));
for (int i = 0; i < 5; i += 2)
myMap.insert(make_pair(i, i + 2));
multimap<int, int>::iterator iter = myMap.begin();
++iter;
++iter;
myMap.erase(iter->second);
++iter;
cout << iter->first << iter->second << endl;
到目前为止,我知道multiset是(0,2),(1,0),(2,4),(3,4),(4,6)。然而,当我试图在其他可能的迭代器位置打印成对时,如果我在那里增加迭代器,只要myMap.erase(iter->second)
行存在,它就不能再打印(4,6)。给出map/set迭代器不可解引用错误。
这里到底发生了什么?到底是什么被"抹去"了?
映射包含键/值对的元素。
erase
表示从容器中擦除指定的键。然而,通过传递iter->second
,您将第三个元素的值传递给erase
,即4。
键值为4的元素被删除,也就是最后一个元素。如果您然后尝试用另一个++iter
解引用该元素,则无法完成,因此您得到该断言。
评论后进一步澄清。
- 调用erase时,
iter
位于(2,4)元素。 - 然后使用参数4调用
erase
-
erase
查找键为4的元素,找到元素(4,6)并从容器 中删除该元素 - (与第4元素无关,这是巧合)
相关文章:
- C++ 结构错误"调用'erase'没有匹配函数
- 调用 erase() 函数是否也会在擦除元素之前更改迭代器值?
- 如何使用 erase() 函数通过索引擦除矢量?
- 字符串 erase() 函数为类似的调用给出不同的结果
- 没有 std::string .erase() 的重载函数实例
- 调用 vector.erase() 函数时指针操作无效错误
- 函数中的C erase()
- 我的erase()函数中的bug用于链接列表
- 使用std::vector中的函数erase
- 为什么std::whatever::erase()是一个方法,std::remove()是独立函数
- 模板化"find-and-erase"函数中的错误
- 在字符串中使用 erase 函数是否会使迭代器失效
- 调用 std::vector:<int>:erase(int&) 时没有匹配函数
- std::deque::erase函数的时间复杂度是多少
- Multimap -想知道.erase()函数
- 成员函数erase()在循环中不起作用
- 错误C2280:试图引用已删除的函数(试图调用vector.erase)
- 为什么在调用erase和push_back函数后,下列元素同时出现在这个c++ vector的头和尾?
- 为什么Vector中的Erase和Insert函数使迭代器失效?
- 没有与参数列表匹配的重载函数".erase"实例