C++集合-初識Set
Set是C++中模板庫的一個STL庫,Set就像英文中的意思一樣是集合1,關於集合必須說明set是關聯式容器。set作爲容器,也是用來存儲同一數據類型的數據類型,並且能從一個數據集合中取出數據,在set中每個元素的值都唯一,而且系統能夠根據元素的值自動進行排序。應該注意的是set中的值不能被直接改變。
C++ STL中標準關聯容器set, multiset, map, multimap內部採用的就是一種非常高效的平衡檢索二叉樹:紅黑樹,也成爲RB樹(Red-Black Tree)。RB樹的統計性能要好於一般平衡二叉樹,所以被STL選擇作爲了關聯容器的內部結構。
爲什麼map和set的插入刪除效率比用其他序列容器高?
因爲對於關聯容器來說,不需要做內存拷貝和內存移動。set容器內所有元素都是以節點的方式來存儲,其節點結構和鏈表差不多,指向父節點和子節點。結構圖可能如下:
A
/ \
B C
/ \ / \
D E F G
set常用方法
begin()——返回set容器的第一個元素 end()——返回set容器的最後一個 元素 clear()——刪除set容器中的所有的元素 empty()——判斷set是否爲空,返回類型爲布爾 max_size()——返回set可能包含的元素最大個數 size()——返回當前set容器中的元素個數 rbegin()——返回的值和end()相同 rend()——返回的值和rbegin()相同
引入頭文件:
需要調用STL庫:#include <set>
來寫一個程序練一練其基本用法
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> myset;
for (int i = 0; i < 10; i++)
myset.insert(10 - i);
cout << "第一個元素:" << endl;
cout << *myset.begin() << endl; //星號
cout << "最後一個元素:" << endl;
cout << *myset.end() << endl;
cout << "是否爲空?" << endl;
cout << boolalpha << myset.empty() << endl;
cout << "元素個數:" << endl;
cout << myset.size() << endl;
cout << "某個值元素的個數:" << endl;
cout << myset.count(1) << endl;
//刪除
myset.erase(myset.begin());
myset.erase(2);
//遍歷set集合
set<int>::iterator it1; //迭代器
for (it1 = myset.begin(); it1 != myset.end(); it1++)
cout << *it1 << endl;
return 0;
}
運行結果:
第一個元素:
1
最後一個元素:
10
是否爲空?
false
元素個數:
10
某個值元素的個數:
1
3
4
5
6
7
8
9
10
n. (物品的)一套,一組,一副;一夥(或一幫)人,團伙,階層;電視機,收音機;佈置,場景,舞臺;(網球、排球比賽等的)盤,局;(數學中的)集,集合;一組歌曲(樂曲);(能力相當的)一批學生;(尤指堅定的)姿勢,神情;做頭髮;凝固,凝結;獸穴;(供移植的)秧苗,插枝;裝置 ↩︎