C++集合-初識Set

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

  1. n. (物品的)一套,一組,一副;一夥(或一幫)人,團伙,階層;電視機,收音機;佈置,場景,舞臺;(網球、排球比賽等的)盤,局;(數學中的)集,集合;一組歌曲(樂曲);(能力相當的)一批學生;(尤指堅定的)姿勢,神情;做頭髮;凝固,凝結;獸穴;(供移植的)秧苗,插枝;裝置 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章