C++STL—map的使用


最近寫的一道題用到了STL中的map,這部分內容之前沒有系統學過,這里就簡單歸納一下吧。

資料來源:

https://www.w3cschool.cn/cpp/cpp-fu8l2ppt.html

http://c.biancheng.net/view/338.html

https://blog.csdn.net/u010429424/article/details/75332700

常用操作:

  1. 添加元素:可以用Insert,也可以下標添加

 

   map<int ,string> maplive;  
   1.maplive.insert(pair<int,string>(102,"aclive"));
   2.maplive.insert(map<int,string>::value_type(321,"hai"));
   3, maplive[112]="April";//map中最簡單最常用的插入添加!

 

  2.查找:注意,map中元素是key-value配對的,要查找一個元素,需要提供它的key。map的內部是以平衡二叉樹形式儲存的,所以查找的速度為O(logn),速度很快。

  另外,這也意味着,map內部的元素是有序的!所以我們如果只是需要一個按key排序的輸出的話,不需要對map進行排序,直接遍歷輸出即可。

  3.遍歷:map的遍歷是通過迭代器完成的:

1) 正向迭代器,定義方法如下:()

容器類名::iterator  迭代器名;


2) 常量正向迭代器,定義方法如下:

容器類名::const_iterator  迭代器名;


3) 反向迭代器,定義方法如下:

容器類名::reverse_iterator  迭代器名;


4) 常量反向迭代器,定義方法如下:

容器類名::const_reverse_iterator  迭代器名;

遍歷過程:

map<int, int>::iterator iter;
    iter = _map.begin();
    while(iter != _map.end()) {
        cout << iter->first << " : " << iter->second << endl;
        iter++;
    }

注意這里的map.end(),它和map.begin(),map.lower_bound(),map.upper_bound()一樣,返回的是一個迭代器而不是元素本身。

*易錯點:

map::lower_bound(key):返回map中第一個大於或等於key的迭代器指針

map::upper_bound(key):返回map中第一個大於key的迭代器指針

另外:

  1.對於map中沒有的key,如果訪問的話返回的value為0;

  2.map雖然有“下標”訪問並且內部元素是有序的,但這不代表可以實現類似數組的下標訪問,即訪問第0個、第1個·····第n個元素。

  3.map中的end()指向的不是最后一個元素,而是最后一個元素的下一個元素,這樣是為了遍歷時的方便,即使用while(iter != _map.end())的條件變量時可以遍歷到最后一個元素。

舉個例子:

 

#include<bits/stdc++.h>
using namespace std;
int main(){
map<int,int>testmap;
testmap[0]=8;
testmap[2]=9;
//重要!end()指向的是下一個而非尾部
cout<<"begin's first:" <<testmap.begin()->first<<"begin's second:"<<testmap.begin()->second<<" end's first: "<<testmap.end()->first<<endl;
cout<<testmap[1]<<endl;
getchar();
}

 

結果為:

map<int ,string> maplive; 1.maplive.insert(pair<int,string>(102,"aclive")); 2.maplive.insert(map<int,string>::value_type(321,"hai")); 3, maplive[112]="April";//map中最簡單最常用的插入添加!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM