C STL set和multiset的用法

2021-08-24 23:21:47 字數 3703 閱讀 5156

c++ stl set和multiset的使用

std::sets;那個s這個物件裡面存貯的元素是從小到大排序的,(因為用std::less作為比較工具。)

1,set的含義是集合,它是乙個有序的容器,裡面的元素都是排序好的,支援插入,刪除,查詢等操作,就   像乙個集合一樣。所有的操作的都是嚴格在logn時間之內完成,效率非常高。 set和multiset的區別是:set插入的元素不能相同,但是multiset可以相同。

建立 multisetbase;

刪除:如果刪除元素a,那麼在定義的比較關係下和a相等的所有元素都會被刪除

base.count( a ):set能返回0或者1,multiset是有多少個返回多少個.

set和multiset都是引用標頭檔案,複雜度都是logn

2,set中的元素可以是任意型別的,但是由於需要排序,所以元素必須有乙個序,即大小的比較關係,比如   整數可以用<比較.

3,自定義比較函式;

include

typedef struct

ss(型別名);

struct cmp

bool operator()( const int &a, const int &b ) const

(運算子過載,過載<)

setbase; ( 建立乙個元素型別是ss,名字是base的set )

注:定義了<,==和>以及>=,<=就都確定了,stl的比較關係都是用<來確定的,所以必須通    過定義< --「嚴格弱小於」來確定比較關

4,set的基本操作:

begin()         返回指向第乙個元素的迭代器

clear()         清除所有元素

count()         返回某個值元素的個數

empty()         如果集合為空,返回true

end()           返回指向最後乙個元素的迭代器

equal_range()   返回集合中與給定值相等的上下限的兩個迭代器

erase()         刪除集合中的元素

find()          返回乙個指向被查詢到元素的迭代器

get_allocator() 返回集合的分配器

insert()        在集合中插入元素

lower_bound()   返回指向大於(或等於)某值的第乙個元素的迭代器

key_comp()      返回乙個用於元素間值比較的函式

max_size()      返回集合能容納的元素的最大限值

rbegin()        返回指向集合中最後乙個元素的反向迭代器

rend()          返回指向集合中第乙個元素的反向迭代器

size()          集合中元素的數目

swap()          交換兩個集合變數

upper_bound()   返回大於某個值元素的迭代器

value_comp()    返回乙個用於比較元素間的值的函式

1:set元素的插入:

#include #include #include using namespace std;  

void printset(sets)

cout << endl;

return 0;

}

//set::find    

#include #include using namespace std;

int main ()

lower_bound()返回乙個 iterator 它指向在[first,last)標記的有序序列中可以插入value,而不會破壞容器順序的第乙個位置,而這個位置標記了乙個大於等於value 的值。  例如,有如下序列:  ia=;  用值21呼叫lower_bound(),返回乙個指向22的iterator。用值22呼叫lower_bound(),也返回乙個指向22的iterator。

iterator upper_bound( const key_type &key ):返回乙個迭代器,指向鍵值》 key的第乙個元素。

// 6.set::lower_bound/upper_bound  

#include #include using namespace std;

int main ()

// 7.set::equal_elements  

#include #include using namespace std;

int main ()

//lower bound points to: 30

//upper bound points to: 40

set結構體的應用

#include#includeusing namespace std;  

struct haha

///自定義乙個仿函式

};

int main()

另外乙個例項

/*set_intersection()演算法計算兩個集合[start1, end1)和[start2, end2)的交集, 交集被儲存在result中. 

兩個集合以序列的形式給出, 並且必須先按公升序排好位置.

set_intersection()的返回值是乙個指向交集序列末尾的迭代器.

set_intersection()以線性時間(linear time)執行.

如果嚴格弱排序函式物件cmp未指定, set_intersection()將使用《操作符比較元素.

範例 */

// set_intersection example

#include #include #include using namespace std;

int main () ;

int second = ;

vectorv(10); // 0 0 0 0 0 0 0 0 0 0

vector::iterator it;

sort (first,first+5); // 5 10 15 20 25

sort (second,second+5); // 10 20 30 40 50

it=set_intersection (first, first+5, second, second+5, v.begin());

// 10 20 0 0 0 0 0 0 0 0

cout << "intersection has " << int(it - v.begin()) << " elements.\n";

return 0;

} /*輸出: intersection has 2 elements*/

multiset的刪除  重要

a.erase(x);//刪除集合中所有的x

multiset::iterator it=a.find(x);

if(it!=a.end())

c STL set和multiset 學習筆記

c stl set和multiset 1,set的含義是集合,它是乙個有序的容器,裡面的元素都是排序好的,支援插入,刪除,查詢等操作,就 像乙個集合一樣。所有的操作的都是嚴格在logn時間之內完成,效率非常高。set和multiset的區別是 set插入的元素不能相同,但是multiset可以相同。...

C STL set和multiset的使用

std sets 那個s這個物件裡面存貯的元素是從小到大排序的,因為用std less作為比較工具。1,set的含義是集合,它是乙個有序的容器,裡面的元素都是排序好的,支援插入,刪除,查詢等操作,就 像乙個集合一樣。所有的操作的都是嚴格在logn時間之內完成,效率非常高。set和multiset的區...

C STL原始碼分析 set和multiset

侯捷 sl體系結構核心分析 set和multiset探索 stl中assosiated container 比如 set 和 multiset 底層都是由紅黑樹作為支撐實現,所以在了解他們之前,有必要先來了解一下紅黑樹。template class traits class tree public ...