C primer讀書筆記 第11章 關聯容器

2021-09-27 03:05:18 字數 2047 閱讀 5551

1 關聯容器支援高效的關鍵字查詢和訪問

2 map 鍵值對 set僅關鍵字

3 8個關聯容器的3個維度:

①set & map

②關鍵字重複否 multi

③有序否 unordered_

4 set的成員函式find,如果查詢不到元素,返回尾後迭代器

5關聯容器的迭代器都是雙向的

vectorivec;

for (vector::size_type i = 0; i != 10; i++)

setiset(ivec.cbegin(), ivec.cend());

multisetmiset(ivec.cbegin(), ivec.cend());

cout << ivec.size() << endl; //20

cout << iset.size() << endl; //10

cout << miset.size() << endl; //10

自定義比較操作

bool cmp(const int a, const int b)

int main()

; sort(vec.begin(), vec.end(),cmp);

for (vector ::iterator it = vec.begin(); it != vec.end(); it++)

cout << *it << " ";

cout << endl;

}

cmp即為自定義比較操作函式

使用關鍵字型別的比較函式

關聯容器的關鍵字的不能改變的

不對關聯容器使用泛型演算法

對於包含不重複關鍵字的容器,只有第乙個帶有此關鍵字的元素才被插入到容器中

對於不包含重複元素的容器的insert函式的返回值:返回pair,其first成員是乙個迭代器,second成員是bool值,判斷元素是否插入

除了順序容器可以給erase傳入迭代器或迭代器對,還可以傳入key_value引數,刪除所有匹配給定關鍵字的元素,返回實際刪除的元素的個數。

不能對包含重複元素的關聯容器執行下標操作,不對set執行下標操作

下標運算子可能插入乙個新的元素:如果下標對應的關鍵字並不在關聯容器中,會為它建立乙個元素並插入到容器中,並進行值初始化

成員函式at(k):訪問關鍵字為k的元素,返回對應的元素的值;如果k不存在,會丟擲out_of_range異常

find() &count():

find判斷元素是否存在,如果對應關鍵字存在,返回指向該關鍵字對應元素的迭代器;如果不存在,返回尾後迭代器

count統計元素出現次數

lower_bound(k) & upper_bound(k):

lower_bound(k) :返回乙個迭代器,指向第乙個關鍵字不小於k的元素;

upper_bound(k):返回乙個迭代器,指向第乙個關鍵字大於k的元素;

equal_range():返回乙個迭代器pair,表示關鍵字等於k的元素的範圍,若k不存在,pair的兩個成員均等於c.end()

在包含重複元素的有序關聯容器中查詢元素:此類容器具有相同關鍵字的元素在容器中相鄰儲存

法一:使用count統計該關鍵字對應的元素個數,使用find獲得指向乙個該關鍵字對應的元素,for迴圈的迭代次數依賴於count值

法二:使用lower_bound(k) & upper_bound(k),得到具有關鍵字k的元素的範圍

法三:呼叫equal_range()

無序容器的底層實現機制是hash函式,在儲存上組織為一組桶,使用hash函式將元素對映到桶。雜湊值相同的元素在乙個桶中,關鍵字相同的元素更在乙個桶中。

順序容器是通過位置訪問元素的,關聯容器是通過關鍵字訪問元素的。

有序容器元素按順序(也可以是自定義的順序)儲存。

無序容器中,具有相同關鍵字的元素也是相鄰儲存。

C Primer 讀書筆記 第11章 泛型演算法

泛型演算法依賴於迭代器,而不是依賴容器,需要指定作用的區間,即 開始,結束 表示的區間,如上所示 此外還需要元素是可比的,如果元素本身是不可比的,那麼可以自己定義比較函式。fill,fill n,copy,replace,sort,unique,count if,stable sort 此外在有乙個...

C Primer 讀書筆記 第12章 類

1.建構函式一般應用乙個建構函式初始化列表來初始化物件的資料成員。2.建構函式不能為const。3.可以認為夠在函式分兩個階段執行 1 初始化階段 2 普通計算階段,計算階段由建構函式函式體中所有語句組成。4.不管成員是否在建構函式初始化列表中顯示初始化,類型別的資料成員總是在初始化階段初始化,初始...

c primer讀書筆記 第5章 語句

1.switch語句 case關鍵字和它對應的值一起被稱為case標籤,case標籤必須是整型常量表示式。int val 42 char ch while cin ch switch的執行流程有可能跨過某些case標籤。如果程式跳轉到了某個特定的case,則switch結構中該case標籤前的部分會...