C++ STL set詳解

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";
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章