3. 常用函式(操作)
4. 常用演算法
stl關聯容器能通過關鍵字(search key)直接訪問從而儲存和讀取元素。在關聯容器中按排序順序維護關鍵字。對關聯容器迭代時,按該容器的排列順序遍歷。
map是一對一對映,利用map可以指定關鍵字,迅速取得相關資料,map通常稱為關聯陣列。在map的下標運算子[ ]中提供關鍵字,即可找到該關鍵字的相關資料。可以在map 的任何地方進行插入與刪除。
multimap關聯容器用於快速儲存和讀取關鍵字與相關值(關鍵字/數值對)。
map、multimap支援雙向迭代器。
用 typedef 使得型別名較長的**更方便讀寫
//宣告乙個map,關鍵字int型別,相關值double型別,預設公升序排列
mapmap1;
或 map>map1;
//宣告乙個multimap,關鍵字int型別,相關值double型別,按公升序排列,預設公升序排列
multimapmap1;
或 multimap>map1;
//用typedef生成用函式物件less按公升序排列的整型multimap型別,
//這個新型別用於例項化乙個整型multimap物件map1
typedef multiset> mmid;
mmid map1;
//宣告乙個multimap,關鍵字int型別,相關值double型別,按降序排列
multimap>set1;
或 typedef multiset> mmid;
mmid set1;
//宣告乙個map1,將map2賦值給map1
mmid map1=map2;
或 mmid map1(map2);
或 mmid map1(map2.begin(),map2.end());
//宣告乙個set1,賦值
mmid set1=;
//宣告乙個set1,將陣列a[0]到a[4]賦值給set1
mmid set1=(a,a+5);
或 mmid set1=(&a,&a+5);
//生成乙個set1,將大小設為10,且每個元素都為設定為5
mmid set1(10,5);
map1.empty(); //返回值bool型別,若map1為空,則返回true
map1.size(); //返回值為int型別,map1當前存放的元素的個數
//返回iterator,指向第乙個找到數值2的位置,若找不到則返回的iterator等於map1.end()
map1.find(2);
//返回map1中第乙個找到數值2的位置的iterator,如果找不到則返回end()
map1.lower_bound(2);
//返回map1中最後乙個找到數值2的位置的後乙個位置的iterator,如果找不到則返回end()
map1.upper_bound(2);
//宣告乙個pair類物件p,pair類物件用於運算元值對
//pair型別包含兩個public資料成員first和second
//在這裡,pair的內容是整型multiset的兩個iterator。
pairp;
//確定map1中數值2的lower_bound和upper_bound,返回型別為pair
p=map1.equal_range(2);
map1.count(2); //確定map1中數值2出現的次數
map的迭代器通常實現為map元素的指標。
//開始指標(正向)
map1.begin()
//結束指標(正向),指向map1最後乙個元素的後一位
map1.end()
//開始指標(逆向)
map1.rbegin()
//結束指標(逆向),指向map1最後乙個元素的後一位
map1.rend()
//常量開始指標(正向),不能通過該指標來修改所指內容
map1.cbegin()
//常量結束指標(正向),不能通過該指標來修改所指內容,指向map1最後乙個元素的後一位
map1.cend()
//迭代器,順序訪問
for (map::iterator p = nums.begin(); p != nums.end(); p++)
cout << p->first << '\t' << p->second;
或 for (multimap::iterator p = nums.begin(); p != nums.end(); p++)
cout << p->first << '\t' << p->second;
//迭代器,逆序訪問
for (map::iterator p = nums.rbegin(); p != nums.rend(); p++)
cout << p->first << '\t' << p->second;
//輸出迭代器,copy演算法
ostream_iteratoroutput(cout, " ");
copy(map1.begin(),map1.end(),output);
cout若是map的話,插入已存在的關鍵字會失敗,但不會報錯,只是直接忽略。
//在map1中插入數值對(2,10.2),由於宣告了公升序排列,插入後map將保持公升序
map1.insert(mmid::value_type(2,10.2));
//若map中已存在關鍵字2,那麼將相關值修改為20;若不存在,則相當於插入操作
map1[2]=20;
//在map1中刪除迭代器指向的元素
map1.erase(map1.begin());
//在set1中刪除迭代器指向的區間的全部元素
map1.erase(map1.begin(),map1.end());
//在set1中刪除元素等於10的所有副本
map1.erase(10);
//將map1和map2交換
map1.swap(map2);
//重置map1的大小為10
map1.resize(10);
#include
//將set2從頭到尾的內容複製給set1
copy(set2.begin(),set2.end(),set1);
//輸出set1的內容
copy(set1.begin(),set2.end(),ostream_iterator(cout," "));
STL之六 map multimap用法詳解
於 使用map multimap之前要加入標頭檔案 include,map和multimap將key value當作元素,進行管理。它們可根據key的排序準則自動將元素排序。multimap允許重複元素,map不允許重複元素。map和multimap內部的資料結構也是平衡二叉樹。map和multim...
STL學習筆記 map multimap容器
簡介 map是標準的關聯式容器,乙個map是乙個鍵值對的序列,即 key,value 提供基於key的快速檢索能力 map中key的值是唯一的。map中的元素按照一定的順序排列,元素插入是按照排序規則插入的,不能指定位置插入 map的具體實現是紅黑樹變體的平衡二叉樹資料結構。插入和刪除比vector...
STL中的map multimap小結
1 使用map multimap之前必須包含標頭檔案 include並且和所有的關聯式容器一樣,map multimap通常以平衡二叉樹來完成 2 namespace std 第乙個template引數被當作元素的key,第二個當作元素的value。key value必須具備assignable和c...