《CPrimer》第10章學(xué)習(xí)筆記_第1頁
《CPrimer》第10章學(xué)習(xí)筆記_第2頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、C+ Primer第 10 章學(xué)習(xí)筆記第 1 0 章:關(guān)聯(lián)容器關(guān)聯(lián)容器( associative container )支持通過鍵來高效地查找和讀取元素。學(xué)習(xí)摘錄 093:關(guān)聯(lián)容器和順序容器的本質(zhì)差別關(guān)聯(lián)容器通過鍵(key)存儲和讀取元素;順序容器則通過元素在容器中的位置順序存儲和訪問元素。學(xué)習(xí)摘錄 094:關(guān)聯(lián)容器的主要特點關(guān)聯(lián)容器的獨特之處在于支持鍵的使用。關(guān)聯(lián)容器根據(jù)鍵的次序排。在迭代遍歷關(guān)聯(lián)容器時, 我們可以確保按鍵的順序訪問元素, 而與元素在容器中的存放 位置完全無關(guān)。 (與插入順序也無關(guān))學(xué)習(xí)摘錄 095:關(guān)聯(lián)容器的類型 1. map 關(guān)聯(lián)數(shù)組;元素通過鍵來存儲和讀取 2. set

2、大小可變的集合,支持通過鍵實現(xiàn)的快速讀取 3. multimap 支持同一個鍵多次出現(xiàn)的 map 類型 4. multiset 支持同一個鍵多次出現(xiàn)的 set 類型學(xué)習(xí)摘錄 096:兩種基本關(guān)聯(lián)容器的基本特點- 1. map 的元素以鍵值(key-value )對的形式組織。 附:鍵,用作元素在 map 的索引。 2. set 僅包含一個鍵,能有效地支持關(guān)于某個鍵是否存在的查詢。學(xué)習(xí)摘錄 097:四種關(guān)聯(lián)容器需要注意的地方 1. set 和 map 類型的對象所包含的元素都具有不同的鍵,不允許為同一個鍵添加第二 個元素。 2. multimap 和 multiset 類型允許多個元素擁有相同的

3、鍵, 即用于一個鍵必須對應(yīng)多個實 例的情況下。 (這兩種類型不支持下標運算)第一節(jié): pair 類型 #include 學(xué)習(xí)摘錄 098:pair 的創(chuàng)建與初始化 p a i r elem(“OK”, 1/1h0o);lds a string and an int pairstring, vector line; / holds string and vector學(xué)習(xí)摘錄 099:pair 對象的操作 pair 類,可直接訪問其數(shù)據(jù)成員:成員都是公有的,分別命名為first 和 second pair elem; elem.first =“OK”; elem.second = 3; cout

4、elem.first elem.second; / 就這樣,就給它們賦值了。學(xué)習(xí)摘錄 100 :生成新的 pair 對象 (make_pair) pair next_auth; string first, last; while(cin first last) / generate a pair from first and last next_auth = make_pair(first, last); / process next_auth.第三節(jié): map 類型 #include map 類型通常可理解為“關(guān)聯(lián)數(shù)組”通過鍵獲取值,鍵值相關(guān)聯(lián)。學(xué)習(xí)摘錄 101:鍵類型的約束 默認情況下標準

5、庫使用鍵類型定義 操作符來實現(xiàn)鍵的比較。 所用的比較函數(shù)必須在鍵類型上定義嚴格弱排序(strict weak ordering )摘錄有想 101 :這也就是說, map 中的 first 類型必須支持 (小于)操作符。學(xué)習(xí)摘錄 102: map 類定義的類型 map:key_type 在 map 容器中,用作索引的鍵的類型 map:mapped_type 在 map 容器中,鍵所關(guān)聯(lián)的值的類型 map:value_type 一個 pair 類型,它的 first 元素具有 key_type 類型, second 元素 具有mapped_type 類型學(xué)習(xí)摘錄 103:map 類定義類型的訪問

6、方法及需要注意的地方當使用了 map:value_type 時,該類型中的 key_type 類型是 const 性質(zhì),不可修改。 當使用了 map:iterator 時,該類型中的 key_type 類型是 const 性質(zhì),不可修改。 摘錄有想 103 : 即 map ok; map:value_typevt; map:iterator = ok.begin(); vt - first; 只能讀取,不能賦值。iterator - first 也是只能讀取不能賦值。學(xué)習(xí)摘錄 104 :下標在 map 中的行為 假如定義了一個名為 ok 的 map 對象 用下標操作 ok “in ” = 會

7、12 有以下結(jié)果: 當 in 存在,賦 ok - second 值為 12;- 當 in 不存在,新建(即插入)” irS素并賦值為 12. 摘錄有想 104 :與順序容器不同的一點是,用下標訪問有可能會使 map 容器添加一個新的元素。學(xué)習(xí)摘錄 1 05:map 中常用的 insert 操作 m.insert(make_pair( “ok” ,12); m.insert(map:value_type(“ok” , 1);m.inert(map: iterator a = m.begin(), map:iterator b=+a );這三種操作,返回的都是 void 類型。學(xué)習(xí)摘錄 106:查

8、找 map 中的元素 m.find(k); 返回迭代器, 存在,返回符合位置的迭代器, 不存在,返回超出末端迭代器。 m.count(k); 返回 m 中 k 的出現(xiàn)次數(shù)。摘錄有想 106 : count 操作根據(jù) map 的性質(zhì),只能回返回 0 或 1.學(xué)習(xí)摘錄 107 :從 map 中刪除元素 / erase of a key returns number of element removed if(word_count.erase(removal_word) ) cout “ ok: “ removal_word “ removedn ”; else cout “ oops: “ rem

9、oval_word “ not found! n ”; m.erase(k) 刪除 m 中鍵為 k 的元素。返回 size_type 類型的值,表示刪除的元素個數(shù)。第五節(jié): multimap 和 multiset 類型學(xué)習(xí)摘錄 108: multimap 和 multiset 類型元素的添加 由于鍵不要求是唯一的, 因此每次調(diào)用 insert總會添加一個元素。 multimap authors; / adds first elemt with key a authors.insert(make_pair( string(“ a” ), string( “ b” ) ); ok: adds se

10、cond element with key a authors.insert(make_pair(string(“ a” ), string( “ c” ) );學(xué)習(xí)摘錄 109: multimap 和 multiset 類型元素的刪除帶有一個鍵參數(shù)的 erase 版本將刪除擁有該鍵的 “所有”元素,并返回刪除元素的個數(shù)。 multimap :size_typecnt = authors.erase(“ a” );學(xué)習(xí)摘錄 110: multimap 和 multiset 類型元素的查找第一種方法 直接見實例,當使用 iter與 find 結(jié)合時, iter 能保存所有 find 找到的鍵的結(jié)

11、果。/ author we ll look forstringsearch_item(“ A” );typedefmultimap:size_typesz_type; sz_type entries = authors.count(search_item);/ get iterator to the first entry for this author multimap: iterator iter =authors.find(search_item);/ loop through the number of entries there are for this author for(sz_

12、typecnt = 0; cnt != entries; +cnt,+iter) cout second end; / print each title 上例中,count 函數(shù)求出某鍵出現(xiàn)次數(shù), 而 find則返回一個迭代器,指向第一個正在查 找的實例。學(xué)習(xí)摘錄 110: multimap 和 multiset 類型元素的查找第二種方法 m.lower_bound(k) 返回一個迭代器,指向鍵不小于 k 的第一個元素 m.upper_bound(k) 返回一個迭代器,指向鍵大于 k 的第一個元素/ definitions of authors and search_item as above

13、/ beg and end denote range of elements for this author typedefmultimap:iteratorauthors_it; authors.it beg = authors.lower_bound(search_item); authors.it end =authors.upper_bound(search_item);/ loop through the number of entries there are for this author while( beg != end)cout second endl; / print ea

14、ch title+beg;摘錄有想 110 :這里利用了迭代器取得元素在 multimap 中的區(qū)間, 能這樣操作是因為, 在 multimap 中, 它的元素是以“鍵”的 (小于)的順序排序的學(xué)習(xí)摘錄 111: multimap 和 multiset 類型元素的查找第三種方法 m.equal_range(k) 返回一個迭代器的 pair 對象,它的 first 成員等價于 m.lower_bound(k) , 它的second 成員等價于 m.upper_bound(k);直接見實例: typedefmultimap:iterator authors_it;/ definitions of authors and search_item as above/ pos holds iterators that denote range of elements for this key pair pos =authors.equal_range(search_item);/ loop through the number of entries there are for this author while(pos.first != pos.second)cou

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論