map判斷值是否存在需要注意的問題

晚餐吃什麼發表於2018-12-03

對於像這種判斷

map<int,int> myMap;

//此時即使myMap[2]不存在,經過這樣的判斷之後將會建立myMap[2]並初始化為0
if(myMap[2]==5){

//

}else{
    //size已經發生了變化
    cout<<myMap.size()<<endl;
}

特別注意:先,會在map查詢這個鍵值的項,map如果不包含某個鍵值,會返回map的end,
然後它發現此鍵值沒有找到(_Where == this->end())的話,
會自動在末尾插入(this->insert(_Where)一個以你輸入的鍵值和value的預設值(mapped_type())構成的對兒(pair),
然後返回這個插入項的值(second,鍵是first)。而int的預設建構函式int(),就是0。

也就是時候,哪怕你沒有對map進行插入操作,哪怕只是用[]判斷了下返回值是否是0,map物件也會自動新增一項。


不過一般判斷map是否包含一個鍵,是用map的find方法,判斷find的返回結果是否是map的end。
 

相關文章