兩個基本的關聯容器:
map: 關聯陣列, 元素通過鍵來儲存和讀取
set: 集合,
multimap: 同乙個鍵可多次出現的map
multiset: 同乙個鍵可多次出現的set
pair型別 : 標頭檔案 utility
map 型別: 標頭檔案 map
建構函式:
mapm;
mapm(m2); 建立m2的副本
mapm(b,e); 儲存迭代器b 和 e 標誌的範圍內的元素的副本。元素的型別必須能轉換成pair
鍵型別的約束:
關聯容器中,鍵不但有乙個型別,還有乙個相關的比較函式。
唯一的約束是必須支援< 操作符,支援其他的關係或相等運算,不做要求
map 定義的型別:
map::key_type map容器中,用作索引的鍵的型別
map::value_type pair 型別, first 元素具有constmap::key_type 型別 ;second
注意:value_type 是pair 型別,它的值成員可以修改,但鍵成員不可以。
map迭代器 解引用 是 pair 型別的物件
給map 新增元素:
1、使用下標訪問map物件。
注意:用下標訪問不存在的元素會導致在map容器中新增乙個新的元素,鍵為下標值。
下標操作符返回的值 與 對 map迭代器進行解引用獲得的型別不用。
區別:
map::insert
1)m.insert(e): e 的型別是 在m上的value_type 型別。
鍵(e.first) 不在m中: 插入值為 e.second 的新元素
鍵(e.first) 已在m中: 保持m不變
返回值: 乙個pair型別。 《指向鍵為e.first的元素的迭代器, bool型別》
m中是否存在 鍵 e.first 返回值的區別:不在的話 返回值pair 裡面的bool為假,否則為真
ex: mapword_count;
word_count.insert( map::value_type("anna",1));
簡化的:
word_count.insert( make_pair("anna",1) );
typedefmap::value_typevaltype
word_count.insert( valtype("anna",1));
上面的插入返回的pair 型別如下:
pair< map::iterator, bool>
2)m.insert(beg,end); 插入beg 和 end 範圍內的元素的副本, 型別必須是m.value_type。
返回void
3)m.insert(iter,e) 跟第乙個插入方式一樣,iter 的作用不是很明白。
查詢並讀取map 的元素:
m.count(k) 返回m中k的出現次數
m.find(k) 如果存在k索引的元素,返回指向該元素的迭代器。否則,返回超出末端迭代器。
map 中刪除元素:
m.erase(k) 刪除m中 鍵為 k 的元素。返回刪除的元素個數,型別:size_type
m.erase(p) 刪除 迭代器p指向的元素,返回void
m.erase(b,e) 刪除 b e之間的元素副本,返回void
再次記住: const string & 可以用實參string 或 c_str c 風格字串 傳遞引數。
四章 札記 C primer 之旅
陣列的型別 不能是引用。即不存在引用的陣列。陣列 char s c 等價於 char s2 陣列下標的正確型別是 size t 指標 理解指標宣告語句時,從右往左閱讀。ex string pstring 把 pstring 定義為 指向string 的指標。有效的指標 的三種狀態 1 乙個特定物件的...
c primer 筆記,第十章(泛型演算法)
accumulate第三個三處所傳的儲值的型別必須定義了 運算子,例如 將空串當作乙個字面值傳給第三個引數是不可以的 會導致編譯錯誤,const char 上並沒有定義 運算子 string sum accumulate v.cbegin v.cend string上定義了 運算子 string s...
c primer 第十章泛型演算法lambda
謂詞是乙個呼叫表示式,其返回結果是乙個能用做條件的值。標準庫演算法為此分為兩類 1 一元謂詞 意味著只能接受單一引數 2 二元謂詞 意味著他們有兩個引數 接受謂詞的演算法對輸入序列中的元素呼叫謂詞。因此元素型別必須能轉換為謂詞的引數型別。以sort和isshorter舉例 eg bool issho...