leetcode中常見的C++ map用法

map簡介

map是C++中的一種鍵值對容器,要點就是數據在map中是成對出現的,可以經過鍵也就是key來快速找到對應的值。編程

使用map

本身編程時須要在代碼前加上下面的頭文件來使用map函數

#include<map>

聲明

map<int, string> my_map;  //聲明一個map
                       //map的鍵值對類型能夠是基礎數據類型,
                       //也能夠是結構體或類

map迭代器

和vector同樣,map也存在迭代器,方便對map進行遍歷操做code

map<int, string>::iterator iter = my_map.begin();

map中也存在begin,end,rbegin,rend,前二者爲順序的頭尾迭代器,後二者爲逆序的頭尾迭代器。排序

插入數據

map中經常使用的插入數據方式有兩種,一種是經過下標插入,一種是經過insert函數插入string

my_map[key] = value;
pair<map<int, string>::iterator, bool> Insert_Pair 
= my_map.insert(pair<int, string>(1, "one"));

insert函數中的參數除了能夠是pair數據之外,還能夠是it

map<int, string>::value_type(1, "one")

這樣子的格式,可是我的仍是比較喜歡直接經過下標插入
這裏要注意比較關鍵的一點是上述兩種方式插入的結果多是不一樣的。當key在map中已經存在時,經過下標插入會直接覆蓋以前的值,而insert則不會插入。
從代碼中咱們也能夠看出insert函數的返回值是一個pair,pair的第一個值是要插入的map的和插入值的key相同的那個迭代器,而第二個值就是插入結果,true則成功插入,false則沒有。容器

還有一點特別要注意的是不要用下標來查找map中是否存在某鍵值對,這會致使map中插入新的值或者以前的值被覆蓋。基礎

判斷key是否存在

對於map來講判斷key是否存在是一個很是重要的操做遍歷

int num = my_map.count(key);  //返回值是0或1,表示map中某
                              //個key出現的次數
map<int, string>::iterator iter = my_map.find(key);  
                        //返回值是一個迭代器 
                        //若是找到了就是對應的鍵值對
                        //若是沒找到就是my_map.end()對應的迭代器

刪除數據

map中刪除數據主要有三種方式,經過迭代器刪除某個鍵值對,經過迭代器刪除某些鍵值對和經過key刪除鍵值對map

my_map.erase(iter);
my_map.erase(begin_iter, end_iter);
my_map.erase(key);

在map中使用結構體

這裏有一點須要注意就是map中會自動按key升序排序,因此若是使用結構體做爲map的key或者value,在插入的時候可能會遇到問題,這時候就須要重載小於操做符<。這一點我不多用,若是下次碰到的話再補充好了。

其餘經常使用函數

my_map.size(); //返回map中的鍵值對個數
my_map.clear(); //清除map中全部鍵值對
my_map.empty(); //返回map是否爲空,返回值爲bool
相關文章
相關標籤/搜索