STL的set关联容器解析
扫描二维码
随时随地手机看文章
现在说下容器的种类,分为关联容器和顺序容器:
关联容器:就是通过键值进行存储和读取的容器,
顺序容器:就是根据元素在容器中的位置进行存储和读取的容器,也即顺序容器
而set容器的根本原理所在就是红黑树,红黑树是一种另类的二叉树,相较普通的二叉树而言就有更好的统计性能,红黑树的定义是:
1、根节点是黑色的
2、节点不是红色就是黑色的
3、每个红色节点的左右节点必须是黑色节点
4、从叶子节点到根节点的路径上具有相同的黑色节点和红色节点
关于set关联容器,的定义就是key-type和value-type相同的关联容器
set容器中具有5个变量
M_color :标记颜色
M_parent:标记父节点所在
M_left:标记左子节点
M_right:标记右子节点所在
M_data:标记了数据所在
关于set的插入操作,使用的是insert_unique也即不允许插入重复的值!!!!
同时需要注意的是set容器不能插入重复的值
这样还有一点就是:
关于set容器使用中序遍历算法对set容器进行遍历操作:
所以begin():返回的是最左节点,也即set容器中的最小值所在
end():函数返回的是根节点,因为根据中序遍历,最右节点的++操作就是根节点所在!!!
现在要说的是set容器的++操作和--操作:
++操作:
根据中序遍历,进行向前遍历遍历结果应该是由小到大的升序排列!!
--操作:
根据中序遍历,进行向后遍历
set的应用如下:
#include#includeusing namespace std; int main() { sets; s.insert(1); s.insert(2); s.insert(3); s.insert(1); cout<<"set 的 size 值为 :"<<s.size()<<endl; cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl; cout<<"set 中的第一个元素是 :"<<*s.begin()<<endl; cout<<"set 中的最后一个元素是:"<<*s.end()<<endl; s.clear(); if(s.empty()) { cout<<"set 为空 !!!"<<endl; } cout<<"set 的 size 值为 :"<<s.size()<<endl; cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl; return 0; }
关于mutlieset容器,与set容器不同的是mutileset容器可以存放相同的值,也即set使用的是insert_unique的是,而mutileset的插入使用的是insert_equal也即在mutile_equal可以插入相同的值,插入原则是:小于的值是放在当前节点的左子树上,而大于等于的数值则是放在当前节点的右子树上