set底层是红黑树。
关于set,必须说明的是set关联式容器。set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。
为何map和set的插入删除效率比用其他序列容器高?
一句话:因为对于关联容器来说,不需要做内存拷贝和内存移动。
set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点。因此插入的时候只需要稍做变换,把节点的指针指向新的节点就可以了。删除的时候类似,稍做变换后把指向删除节点的指针指向其他节点也OK了。这里的一切操作就是指针换来换去,和内存移动没有关系。
set中常用的方法
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
set<int> si;
set<int>::iterator it;//迭代器
int i = 10;
while (i--)si.insert(i);//从10-1插入
si.insert(1);//此处没有插入 因为已经有1了
it = si.begin();//让迭代器指向头部
while (++it != si.end())cout << *it;//从1-10输出 set内部会自动排序
cout << endl;
cout << "11出现的次数:" << si.count(11) << endl;//11出现的次数 0
cout << "1出现的次数:" << si.count(1) << endl;//1出现的次数 1
si.erase(5);
it = si.begin();//让迭代器指向头部
while (++it != si.end())cout << *it;//遍历set
cout << endl;
if (si.find(3) != si.end()) cout << "找到3了";//find()寻找某数,如果找不到返回end()
else cout << "没找到3";
}