stl 關聯容器

2021-08-21 18:45:17 字數 2405 閱讀 6068

簡介

對於關聯容器,它的每個元素都有乙個鍵(key),容器中的元素的順序並不能人為隨意決定,而是按照鍵的取值公升序排列的。也就是說,對於乙個關聯容器s,使用迭代器在 [s.begin(),s.end() )區間內遍歷,訪問到的序列總是公升序的。

分類

按照容器中是否允許出現重複鍵值,關聯容器可分為單重關聯容器和多重關聯容器,單重關聯容器中的鍵值是唯一的,不允許重複,集合和對映屬於這一類;多重關聯容器中,相同的鍵值允許重複出現,多重集合和多重對映屬於這一類。按照鍵與元素的關係可以分為簡單關聯容器和二元關聯容器。簡單關聯容器以元素本身作為鍵,集合和多重集合屬於這一類;二元關聯容器的元素是由鍵和某種型別的附加資料共同構成,鍵只是元素的一部分,對映和多重對映屬於這一類

4種關聯容器的分類 型別

簡單管理容器

二元關聯容器

單重關聯容器

集合(set)

對映(map)

多重關聯容器

多重集合(multiset)

多重對映(multimap)

二元組pair

二元關聯容器的元素型別是鍵型別和附加資料型別的組合,這種組合型別可以用乙個二元組(pair)來表示,pair是標頭檔案中定義的結構體模板:

template

struct pair{

t1 first;  //二元組的第一元

t2 second;  //二元組的第二元

pari();    //預設建構函式

pair(const t1 &x,const t2 &y);     //構造first=x,second=y的二元組

templatepair(const pair&p);  //複製建構函式

關聯容器的共性

假設s表示容器的型別,s表示s型別的例項,用t表示s容器的元素型別,用t表示t型別的乙個例項,用k表示s容器的鍵的型別,用k表示k的乙個例項,用n表示乙個整型資料,用p1和p2表示指向s中的元素的迭代器,用q1,q2表示任何乙個指向t型別元素的輸入迭代器,關聯容器的基本功能如下所示:

1.關聯容器之建構函式操作

功能單重關聯容器

多重關聯容器

s s構造乙個空容器

構造乙個空容器

構造乙個空容器

s s(q1,q2)

將 [q1,q2)區間的資料作為s的元素構造s

當[q1,q2)範圍內出現具有相同鍵的元素時,只有乙個元素會被加入s中

[q1,q2)範圍內的所有元素均被無條件加入s中

2.關聯容器之元素的插入操作

功能單重關聯容器

多重關聯容器

s.insert(t)

將元素t插入s容器中

只有當不存在相同鍵的元素時才能成功插入,該函式返回型別為pair。插入成功時,返回被插入元素的迭代器,否則返回與t的鍵相同的元素的迭代器和false

插入總會成功,返回已插入元素的迭代器

s.insert(p1,t)

將元素t插入s容器中,p1是乙個提示的插入位置,如果提示位置準確(即t的鍵的大小剛好在p1-1和p1之間)則可以提高插入效率。即使提示位置不準確也可以正確完成插入操作,該函式總是返回乙個迭代器

只有當不存在相同鍵的元素時才能成功插入,插入成功時,返回被插入元素的迭代器,否則返回與t的鍵相同的元素的迭代器

插入總會成功,返回已插入元素的迭代器

s.insert(q1,q2)

相當於按順序對 [q1,q2) 區間內的每個元素x分別執行s.insert(x)略略

3.關聯容器之元素的刪除s.erase(p1)

刪除p1所指向的元素

s.erase(p1,p2)

刪除 [p1,p2) 區間內的元素

s.erase(k)

刪除所有鍵為k的元素,返回被刪除元素的個數

4.關聯容器之鍵的查詢和計數s.find(k)

找到任意乙個鍵為k的元素,返回該元素的迭代器,如果s中沒有鍵為k的元素,則返回s.end()

s.lower_bound(k)

得到s中第乙個鍵值不小於k的元素的迭代器    (第乙個》=k的元素)

s.upper_bound(k)

得到s中第乙個鍵值大於k的元素的迭代器    (第乙個》k的元素)

s.equal_range(k)

得到乙個用pair表示的區間,記為 [p1,p2) 。該區間剛好包含所有鍵值為k的元素,p1==s.lower_bound(k)和p2==s.upper_bound(k)一定成立

s.count(k)

得到s容器中鍵為k的元素個數

注:關聯容器的插入和刪除操作不會使任何已有的迭代器、指標或引用失效。

STL 關聯容器

1 關聯容器與順序容器的本質區別 關聯容器通過鍵 key 儲存和讀取元素,而順序容器則通過元素在容器中的位置順序儲存和訪問元素。2 關聯容器的型別 map set multimap multiset 3 pair型別 pair型別的比較 p1 p1 p2 如果兩個pair物件的first和secon...

STL 關聯容器

c primer 第11章 關聯容器和順序容器有根本的不同 關聯容器中的元素是按關鍵字來儲存和訪問的。關聯容器型別 分為有序和無序 有序 map 關聯陣列 儲存鍵值對 set 關鍵字即值,即只儲存關鍵字的容器 multimap 關鍵字可重複出現的map multiset 關鍵字可重複出現的set 無...

STL關聯容器

這裡簡單學習一下stl關聯容器,主要是map multimap set multiset以及unordered map。前四個底層實現都是利用紅黑樹實現的,查詢演算法時間複雜度為 o log n 而unordered map從名字上就知道是無序容器,其實現原理類似雜湊表,查詢演算法時間複雜度 o 1...