c Primer筆記(十 關聯容器)

2021-06-04 16:03:08 字數 2540 閱讀 1778

第十章:關聯容器。set map multimap  multiset   鍵是唯讀的,試圖修改只有出錯的份

1.關聯容器和順序容器的本質差別在於:關聯容器通過key鍵儲存和讀取元素,而順序容器則通過元素在容器中的位置順序儲存和訪問元素。

2.set僅僅包含乙個鍵,並有效的支援關於某個鍵是否存在的查詢。即儲存的是1組唯一元素,只有鍵沒有值。適用於有效的儲存不同值的集合。

3.pair型別,定義在 utility標頭檔案中。   pairp1 ;  pairp1(v1 , v2); make_pair( v1, v2 );  p1< p2 ; p1 == p2; p.first   ; p.second;

4.pair其成員是公有的,分別是 first  second . , 除了使用建構函式來進行建立,我還可以使用 make_pair函式來建立pair 物件。

5.說說list, vector , deque , map , set 他們的分別適用情況:

list : 用於需要在容器中間位置插入和刪除元素的情況。

vector :用於需要隨機訪問元素的情況。

deque :適用於需要在容器尾部或首部插入和刪除元素的情況。

map :適用於需要鍵值對的情況,

set :適用於需要使用鍵集合的情況:例如:黑名單的建立和使用

map:

1.他的鍵不但有乙個型別,而且還有乙個相關的比較函式。使用標準庫鍵型別定義的《操作符實現比較。

2.比較函式必須在鍵型別上定義:嚴格弱排序。即,當乙個鍵和自身比較時,肯定會導致false結果。

關於鍵型別,唯一的約束就是:必須支援 < 操作符。

3.map 的內部型別:value_type 是儲存元素鍵和值的 pair型別。 而且還是 pair,他的鍵是不可以修改的,他的值是可以修改的。

將map的迭代器解引用,得到的是pair物件哦。

4.使用下標訪問和新增元素: map1["cwj"] ;  map1["add"]=3; 如果存在,則賦值,如果不存在這個key則建立。

注意:map下標操作符的返回值:是值型別。  map迭代器進行解引用返回的確實pair物件哦。這是與string , vector的不同之處。

5.insert() : map.insert(map::value_type("anna",1));  使用insert可以避免下標操作符所帶來的***:不必要的初始化。 map1.insert(make_pair("anna",1));

如果試圖插入insert()乙個已經存在的值,那麼insert將不做任何的操作。返回false,不會覆蓋原值。

insert()返回值是乙個pair型別:包含乙個迭代器,和乙個bool值:  pair< map::iterator , bool > ret= map1.insert( make_pair(word,1) ); 迭代器指向該元素。ret->xx

6.count  find 用於檢查某個鍵是否存和其具體位置在而不會插入該鍵。  count返回值只能是1,0, m.count(k) ,返回m中出現的次數。  m.find(k) 返回迭代器,否則返回end()迭代器。  count 是否存在 ,  find 在哪個位置。

7.刪除物件:erase(k)  erase(b,e)....

set:

1.他的鍵是唯讀的,不可修改,與list相比,set適用於儲存不修改的東東,list適用於儲存經常修改的東東。

2. setiset2( list1.begin() , list1.end() ); //注意:如果list1中有相同的值,那麼set會自動過濾掉滴,放心好了,以保證set中的唯一性。

multimap mutiset型別:

1.multimap不支援下標運算。在使用multimap或multiset時,對於某個鍵,必須做好處理多個值的準備,而非只有單一的值。

2.帶有乙個鍵引數的erase函式將刪除多有改建的所有元素,並且返回刪除元素的個數。而帶有乙個或者一對迭代器引數的版本,只刪除指定元素,返回void .

3.使用find , count 來查詢。 count返回某鍵出現的次數,find返回乙個迭代器,指向第乙個擁有正在查詢的鍵的例項。

通過for迴圈迭代的次數依賴與count返回的值。

4.與眾不同的面向迭代器的解決方案: 323page

m.lower_bound(k)  ,返回乙個迭代器,指向鍵不小於k的第乙個元素。

m.upper_bound(k) ,返回乙個迭代器,指向鍵大於k的第乙個i元素。

m.equal_range(k)  ,返回乙個pair物件,first是  lower_bound(k)  , second 是upper_bound(k)

在同乙個鍵上呼叫lower_bound 和upper_bound鍵產生乙個迭代器範圍,指示出該鍵所關聯的所有元素。 因為乙個鍵對應多個元素,且鍵是根據大小順序來排列的,所以,必定這些該鍵所關聯的所有元素都是集中聚集在一起放置的。通過lower.... 和 upper...函式,我們不久找到了他們的範圍了嗎,呵呵。只是upper返回最後乙個例項的下乙個位置

,如果所查詢的鍵不在該容器中,那麼lower..  upper...所返回的是同乙個迭代器,指向依據該鍵應該的排序的插入位置。還不錯。(不是最後,而是排序返回的哦)

C Primer 筆記 關聯容器

關聯容器 associative container 支援通過鍵來高效的查詢和讀取元素。map 關聯陣列,元素通過鍵來儲存和讀取 set 大小可變的集合,支援通過鍵來快速讀取 multimap 支援同乙個鍵出現多次的map型別 multiset 支援同乙個鍵多次出現的set型別 pairp1 建立乙...

JMeter學習(十)關聯

話說loadrunner有的一些功能,比如 引數化 檢查點 集合點 關聯,jmeter也都有這些功能,只是功能可能稍弱一些,今天就關聯來講解一下。jmeter的關聯方法有兩種 後置處理器 正規表示式提取器與xpath extractor。第一種方法 正規表示式提取器 在需要獲得資料的上乙個請求上右擊...

《C Primer》學習筆記 關聯容器

一,pair型別 pairp1 建立乙個空pair指標,兩個元素分別是t1,t2型別,採用值初始化 pairp1 v1,v2 first成員初始化為v1,second成員為v2 make pair v1,v2 建立新的pair物件 p1 p2 p1 p2 p.first 返回first成員 p.se...