STL-multimap

简介: 如果键值是string型,直接输出就可以了,multimap是排好序了的, STL的map表里有一个erase方法用来从一个map中删除掉指令的节点eg:map mapTest;typedef map::iterator ITER; ITER iter=mapTest.
如果键值是string型,直接输出就可以了,multimap是排好序了的,

STL的map表里有一个erase方法用来从一个map中删除掉指令的节点
eg:
map<string,string> mapTest;
typedef map<string,string>::iterator ITER;

ITER iter=mapTest.find(key);
mapTest.erase(iter);

像上面这样只是删除单个节点,map的形为不会出现任务问题,
但是当在一个循环里用的时候,往往会被误用,那是因为使用者没有正确理解iterator的概念.
像下面这样的一个例子就是错误的写法,
eg.
for(ITER iter=mapTest.begin();iter!=mapTest.end();++iter)
{
cout<<iter->first<<":"<<iter->second<<endl;
mapTest.erase(iter);
}

这是一种错误的写法,会导致程序行为不可知.究其原因是map 是关联容器,对于关联容器来说,如果某一个元素已经被删除,那么其对应的迭代器就失效了,不应该再被使用;否则会导致程序无定义的行为。
可以用以下方法解决这问题:

正确的写法
1.使用删除之前的迭代器定位下一个元素。STL建议的使用方式
for(ITER iter=mapTest.begin();iter!=mapTest.end();)
{
cout<<iter->first<<":"<<iter->second<<endl;
mapTest.erase(iter++);
}

2. erase() 成员函数返回下一个元素的迭代器
for(ITER iter=mapTest.begin();iter!=mapTest.end();)
{
cout<<iter->first<<":"<<iter->second<<endl;
iter=mapTest.erase(iter);
}

相关文章
|
6月前
|
存储 C++ 容器
map、set、multimap和multiset的使用【STL】
map、set、multimap和multiset的使用【STL】
17 0
|
3月前
|
机器学习/深度学习 C++ 容器
STL_set/multiset
STL_set/multiset
24 1
|
14天前
|
存储 C++ 容器
【C++初阶】STL详解(十)set、map、multiset、multimap的介绍及使用
【C++初阶】STL详解(十)set、map、multiset、multimap的介绍及使用
26 0
|
1月前
|
存储 算法 C语言
【C++入门到精通】C++入门 —— map & multimap (STL)
之前我们学习了C++的基础和一些概念,现在将探讨重要的STL组件——map与multimap。map是关联容器,提供有序键值对存储,基于红黑树,支持高效查找、插入和删除。每个键唯一对应一个值。multimap则允许键的重复。两者都提供迭代器支持,但map的键是唯一的,而multimap允许键重复,插入和查找效率不同。更多详情,请查阅官方文档。祝学习愉快!
12 0
|
30天前
|
存储 算法 C语言
【C++入门到精通】C++入门 —— set & multiset (STL)
探索C++ STL中的重要成员:`set`与`multiset`。`set`是实现有序、不重复元素集合的容器,基于红黑树,提供高效操作。`multiset`则允许元素重复,两者均支持插入、删除、查找等操作。`set`强调元素唯一性,而`multiset`允许元素重复。两者在插入、查找、删除上的时间复杂度均为O(logN)。使用迭代器可遍历元素,但不支持下标访问。了解它们的特点和选择适用场景是关键。
35 0
|
10月前
|
索引 容器
STL-map/multimap容器
STL-map/multimap容器
40 0
第九层(9):STL之map/multimap
第九层(9):STL之map/multimap
第九层(9):STL之map/multimap
第九层(8):STL之set/multiset(上)
第九层(8):STL之set/multiset(上)
第九层(8):STL之set/multiset(上)
第九层(8):STL之set/multiset(下)
第九层(8):STL之set/multiset(下)
第九层(8):STL之set/multiset(下)
|
存储 NoSQL 数据处理
c++中map、multimap、unordered_map、unordered_multimap的区别
c++中map、multimap、unordered_map、unordered_multimap的区别
304 0
c++中map、multimap、unordered_map、unordered_multimap的区别