足跡C primer 38 關聯容器操作 2

2021-09-25 17:22:00 字數 2756 閱讀 2114

關聯容器操作(2)

map的下標操作

map和unordered_map容器提供了下標運算符合乙個相應的at函式

對於乙個map使用下標操作,其行為與陣列或vector上的下標操作非常不同樣:

使用乙個不再容器中的keyword作為下標。會加入乙個此keyword的元素到map中

map和unordered_map的下標操作

c[k] 返回keyword為k的元素。假設keywordk不再c中。加入乙個keyword為k的元素。對其進行值初始化

c.at(k) 訪問keyword為k的元素。帶引數檢測,假設k不再c重那麼返回乙個異常,out_of_range

與vector和string不同,map下標運算子返回的型別與解引用map迭代器得到的型別不同。

假設我們關心的僅僅只是是特定元素是否在容器中的時候。泛型演算法find是最佳的選擇

void fun1()

; iset.find(1); //返回乙個迭代器,指向key==1的元素

iset.find(11); //返回乙個迭代器,值指向iset.end()

iset.count(1); //返回1

iset.count(11); //返回0

}

今天上傳的有點晚了,放假了,人也懶了- -

下標操作會自己主動加入元素,不好

void fun2()

); }

else

throw runtime_error(" no rule for "+key);

}return trans_map;

}const string & transform(const string &s, const map&m)

else

}void word_transform(ifstream &map_file, ifstream &input)

; iset.find(1); //返回乙個迭代器。指向key==1的元素

iset.find(11); //返回乙個迭代器。值指向iset.end()

iset.count(1); //返回1

iset.count(11); //返回0

}//對map使用find取代下標操作

//下標操作會自己主動加入元素。不好

void fun2()

); } else throw runtime_error(" no rule for "+key); } return trans_map; } const string & transform(const string &s, const map&m) else } void word_transform(ifstream &map_file, ifstream &input) ;

iset.find(1); //返回乙個迭代器,指向key==1的元素

iset.find(11); //返回乙個迭代器,值指向iset.end()

iset.count(1); //返回1

iset.count(11); //返回0

}

今天上傳的有點晚了,放假了,人也懶了- -

下標操作會自己主動加入元素,不好

void fun2()

); }

else

throw runtime_error(" no rule for "+key);

}return trans_map;

}const string & transform(const string &s, const map&m)

else

}void word_transform(ifstream &map_file, ifstream &input)

; iset.find(1); //返回乙個迭代器。指向key==1的元素

iset.find(11); //返回乙個迭代器。值指向iset.end()

iset.count(1); //返回1

iset.count(11); //返回0

}//對map使用find取代下標操作

//下標操作會自己主動加入元素。不好

void fun2()

); } else throw runtime_error(" no rule for "+key); } return trans_map; } const string & transform(const string &s, const map&m) else } void word_transform(ifstream &map_file, ifstream &input) { auto trans_map=bulidmap(map_file); //儲存轉換規則 string text; //儲存輸入中的沒一行 while(getline(input, text)) //讀取輸入一行 { istringstream stream(text); //讀取每乙個單詞 string word; bool firstword=true; //控制是否列印空格 while(stream>>word) { if(firstword) firstword=false; else cout<<" "; //在單詞之間列印乙個空格 //transform返回它的第乙個引數或其轉換之後的形式 // cout《我但是為了這個吃了不少苦頭。

ps:放假了,我預計最多把今天寫完了,明天開始大概要停更了,大家不要停止學習哦,一起加油,一起努力,這本書我還是會看下去的,僅僅是部落格可能更不了了。

C primer 關聯容器

pairp1 pairp1 v1,v2 v1為t1型別,v2為t2型別 make pair v1,v2 返回乙個pair物件 p.first p.second 關聯容器不能通過容器大小定義,不能用resize。mapm m2 mapm mapm b,e b,e為map迭代器。鍵必須支援 map ke...

C Primer 筆記 關聯容器

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

c primer 關聯容器 map

map 是鍵 值對的集合。map型別通常可以理解為關聯陣列,其本質在於元素的值和某個特定的鍵向關聯,而非通過元素在陣列中的位置來獲取 宣告與定義 mapm mapword count 迭代器 map iterator it 對鍵型別的約束 鍵型別必須支援 操作符 map定義的型別 1.迭代器進行解引...