STL學習2常用容器2 7set multiset

2021-09-11 13:37:10 字數 2511 閱讀 5516

一、set容器

1、關聯式容器,內部插入資料時候自動排序,不允許插入重複的key值

2、set/multiset容器不可以通過迭代器修改裡面的元素,因為預設有了排序規則,其底層實現是紅黑樹,紅黑樹是平衡二叉樹的一種

3、樹的簡單知識

3.1二叉樹:任何節點最多隻允許有兩個子節點,分別為左子節點和右子節

3.2平衡二叉樹:左子樹與右子樹的高度的絕對值不能大於1,且這棵樹的子樹也必須是平衡二叉樹

3.3二叉搜尋樹:比節點小的數在左節點比節點大的數在右節點

4、刪除erase(key)

5、find 查詢 查詢容器中是否有響應的key資料,如果有返回迭代器,沒有返回end的位置

6 、count(key)查詢鍵key的元素個數 返回值為int  對於set而言結果是0或者1

7、lower_bound(keyelem) 返回第乙個key>=keyelem元素的迭代器  若未找到返回end()

8、upper_bound(keyelem)返回第乙個key>keyelem元素的迭代器 若未找到返回end()

9、equal_range(keyelem)返回容器中key與keyelem相等的上下限的兩個迭代器 返回乙個對組pair,若未找到均 返回end()

10、對組宣告方式

10.1 第一種宣告 pairp(string("tom"), 18);

10.2 第二種宣告 pairp2 = make_pair("jerry",20);

10.3 訪問第乙個元素first ,第二個元素second,不是方法,相當於類

10、set容器只能插入不重複key值

10.1 insert返回值是pair

10.2bool代表了插入是否成功

11  對於set容器排序

11.1 預設從小到大排序

11.2 若要指定排序規則必須在插入之前,配合仿函式實現,set

11.3 自定義資料型別,必須指定出排序規則

#include "pch.h"

#include #include//set multiset標頭檔案

#includeusing namespace std;

void printset(const set&s)

void test01()

//查詢

void test02()

else

//count(key)查詢鍵key的元素個數 返回值為int

//對於set而言結果是0或者1

int num = s.count(10);

cout << "10的個數為: " << num << endl;

//lower_bound(keyelem) 返回第乙個key>=keyelem元素的迭代器

//若未找到返回end()

set::iterator res = s.lower_bound(30);

if (res != s.end())

else

//upper_bound(keyelem)返回第乙個key>keyelem元素的迭代器

//若未找到返回end()

set::iterator res2 = s.upper_bound(30);

if (res2 != s.end())

else

//equal_range(keyelem)返回容器中key與keyelem相等的上下限的兩個迭代器

pair::iterator, set::iterator> it=s.equal_range(30);

if (it.first != s.end())

else

if (it.second != s.end())

else }

//對組宣告

void test03()

else

pair::iterator, bool> ret2 = s.insert(10);

if (ret2.second)

else

printset(s);

multisetms;

ms.insert(10);

ms.insert(10);

for (multiset::const_iterator it = ms.begin(); it != ms.end(); it++)

cout << *it << " ";

cout << endl;

}//利用仿函式(函式物件) 指定set容器的排序規則

class mycompare

};void test05()

cout << endl;

}//對於自定義資料型別,必須指定排序規則

//自定義資料

class person

string m_name;

int m_age;

};//仿函式 排序規則指定

class mycompareperson

};void test06()

}int main()

STL學習之set容器

set容器只是單純的鍵的集合。除了兩種例外情況外,set容器支援大部分的map操作。建構函式 cpp view plain copy explicit set const compare comp compare const allocator allocator template class in...

C 學習筆記 STL常用容器 set和map

set 所有元素在插入時自動排序,底層結構用二叉樹實現。set和multiset的區別 set不允許容器中有重複的元素,multiset允許容器中有重複的元素。set構造和賦值 構造 預設建構函式 setst 拷貝建構函式 set const set st 賦值 過載等號操作符 set operat...

STL學習2常用容器2 8map multimap

1 關聯式容器,key和value每個元素都是對組 2 所有元素根據元素的鍵值自動排序,所有元素都是pair同時擁有實值和鍵值,其中第乙個元素為鍵值,第二個為實值,可以允許 兩個元素的實值相同,不允許鍵值相同,可以通過迭代器改變元素的實值不能改變鍵值 3 map與list擁有相同的某些性質,在進行元...