C++STL——map与set的使用
map与set
- 容器
- set与map的共同
- map
容器
关联式容器也是⽤来存储数据的,与序列式容器不同的是,关联式容器逻辑结构通常是⾮线性结构,两个位置有紧密的关联关系,交换⼀下,他的存储结构就被破坏了。顺序容器中的元素是按关键字来保存和访问的关联式容器有map/set系列和unordered_map/unordered_set。
map和set底层是红⿊树,红⿊树是⼀颗平衡⼆叉搜索树。set是key搜索场景的结构,
map是key/value搜索场景的结构。
set与map的共同
首先set与map的迭代器都是双向迭代器,这里在前文list提到,这里不过多赘述。
set与map的区别就是set是key型,而map是key/value型。即set只存储关键字,map是存储关键字与对应的值的。由于set与map底层都是红黑树(在后面讲解),所以会进行排序(默认是升序,如果需要降序则需要仿函数/set<int, greater<int>> s
,),set与map都是不支持插入相同的值的,而multiset与multimap支持插入冗余值。
map
map使⽤pair<Key, T>存储键值对数据。map是支持修改value的,但不能修改key,因为一旦修改就会破坏树的结构。map进行修改的方式有两种,一种就是通过map的迭代器进行访问second,另一种就是通过[]
,这个操作符变成了一个多功能操作符,其兼具插入查找修改的功能
map<string,int>m;m[k]++;
以上代码功能:如果k在map中,就将k对应的value值++,如果k不在map中,就将k插入到map中,同时将value置为默认值,并且++ 。可以得知[]
是具备多种功能的操作符,后续会实现map与set的封装。