STL之map multimap學習總結(C )

2021-09-12 18:05:56 字數 3669 閱讀 3523

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...