整理一下最近学习C++时候关于set的博客和知识点。
1、set的定义
1)set是STL中的关联式容器,对应的还有顺序容器 。
关联式容器指通过键值查找。如set, map
顺序容器通过位置查找。如vector、deque、list
两种容器的更多区别可见: https://blog.csdn.net/amf12345/article/details/96819968
2) map和set的区别:
map可以同时拥有实值(value)和键值(key)。 初始化为 map<V, K>
set元素的键值就是实值,实值就是键值。对应初始化为set<V>
参考:https://www.cnblogs.com/omelet/p/6627667.html
3) map和set的相同点:
map和set均可实现根据元素的键值排序,作用机理为红黑树。均没有重复元素。若有N个元素,查找速度为logN。
对应的非排序为unordered_map 和 unordered_set,作用机理为哈希表。查找速度为常量,与元素数量N无关。
推荐参考链接 https://blog.csdn.net/yas12345678/article/details/52601454 查看更详细的set讲解。
2、set的使用
1)初始化等操作
set<K> a; //K为数据类型,如int, float等
a.count(A); //查找A是否存在, 存在返回1,不存在返回0
a.find(A); //如查找到返回迭代器,指向元素,不存在则返回 a.end()
a.insert(A); //向set中插入元素A
a.erase(A); //从set中擦出元素A
其中find 与 count区别:
find()方法返回值是一个迭代器,成功返回迭代器指向要查找的元素,失败返回的迭代器指向end。
count()方法返回值是一个整数,1表示有这个元素,0表示没有这个元素。
详见: https://blog.csdn.net/wxn704414736/article/details/79044099
2)其他常见用法
begin() ,返回set容器的第一个元素
end() ,返回set容器的最后一个元素
clear() ,删除set容器中的所有的元素
empty() ,判断set容器是否为空
max_size() ,返回set容器可能包含的元素最大个数
size() ,返回当前set容器中的元素个数
rbegin ,返回的值和end()相同
rend() ,返回的值和rbegin()相同
3、各种各样的set
1)multiset : 能时刻保证序列中的数是有序的,而且序列中可以存在重复的数
详细介绍参考:https://blog.csdn.net/sodacoco/article/details/84798621