文章目录
  1. map容器
  2. set容器

map容器

提供一对一映射功能的容器,内部采用红黑树实现。定义于<map>

构造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* 默认初始化:定义一个空的map容器 */
map<int, string> ismap;

/* 赋值构造 */
map<int, string> ismap{{1, "one"}, {2, "two"}, {3, "three"}};

/* 拷贝复制 */
map<int, string> ismap(ismap_0);

/* 移动构造
* 区别在于此处的ismap_0是右值
* ismap接管了ismap_0所在内存
* 无需拷贝,相比拷贝复制构造更快
*/
map<int, string> ismap(ismap_0);

/* 拷贝从it_low到it_high(左闭右开)的元素 */
map<int, string> ismap(it_low, it_high);

插入

1
2
3
4
5
6
ismap.insert(pair<int, string>(2, "two"));

ismap.insert(map<int, string>::value_type(2, "two"));

/* 先判断ismap的key集合中是否有2,若有则修改对应的value;否则插入键-值 */
ismap[2]=string("two");

查找

1
2
3
4
5
/* 返回0代表2不存在,返回1代表2存在 */
ismap.count(2);

/* 若2存在返回所在位置的迭代器,否则返回ismap.end() */
ismap.find(2);

删除

1
2
3
ismap.erase(it);

ismap.erase(it_low, it_high);

multimap:一个键可以多次出现,对应的查找操作也有所不同,定义于<map>

1
2
3
4
5
6
7
/* equal_range返回一个pair<multimap<int, int>::iterator, multimap<int, int>::iterator>对象
* 若3存在,则pos.first指向第一个键值等于3的元素
* pos.second指向第一个键值大于3的元素(如果存在的话,否则指向iimap.end())
*/
auto pos=iimap.equal_range(3);
multimap<int, int>::iterator it;
for(it=pos.first; it != pos.second; ++it){}

unorderd_map:使用哈希表实现,元素无序。不利于查找,利于插入删除。操作与map相同。定义于<unorderd_map>

set容器

提供集合功能,内部采用红黑树实现。定义于<set>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* 默认初始化:定义一个空的map容器 */
set<int> iset;

/* 赋值构造 */
set<int> iset{1, 2, 3};

/* 拷贝复制 */
set<int> iset(iset_0);

/* 移动构造
* 区别在于此处的ismap_0是右值
* ismap接管了ismap_0所在内存
* 无需拷贝,相比拷贝复制构造更快
*/
set<int> iset(iset_0);

/* 拷贝从it_low到it_high(左闭右开)的元素 */
set<int> iset(it_low, it_high);

插入

1
2
/* 当num不存在于iset时,可插入 */
iset.insert(num);

查找

1
2
3
4
5
/* 返回0代表2不存在,返回1代表2存在 */
iset.count(2);

/* 若2存在返回所在位置的迭代器,否则返回iset.end() */
iset.find(2);

删除

1
2
3
iset.erase(it);

iset.erase(it_low, it_high);

multiset:一个元素可以出现多次,对应的查找操作也有所不同,定义于<set>

1
2
3
4
5
6
7
/* equal_range返回一个pair<multiset<int>::iterator, multiset<int>::iterator>对象
* 若3存在,则pos.first指向第一个键值等于3的元素
* pos.second指向第一个键值大于3的元素(如果存在的话,否则指向iimap.end())
*/
auto pos=imset.equal_range(3);
multiset<int>::iterator it;
for(it=pos.first; it != pos.second; ++it){}

unorderd_set:使用哈希表实现,元素无序。不利于查找,利于插入删除。操作与set相同。定义于<unorderd_set>