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";
}