【C++】17. map []操作符、insert()、emplace()
生活随笔
收集整理的這篇文章主要介紹了
【C++】17. map []操作符、insert()、emplace()
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. std::map 的 []操作符
對于 std::map容器來說,調用[]操作符會自動創建一個value為空的鍵值對
std::map<std::string,int> name_age_map; name_age_map["Jack"] = 25;注意上面這句name_age_map["Jack"] = 25;,當name_age_map中沒有"Jack"的key時,[]操作符會自動創建一個"Jack"的關鍵字插入到name_age_map中,并將其賦值為25。
即,沒有此鍵值則添加,有此鍵值則重新賦值。
注意:
當map的value是指針時,不能少了判斷該key存不存在,如果不進行判斷而直接使用map[key]->func()就會在運行時出現段錯誤,因為你直接調用[]就直接給map插入了一個key,并且其對應的值為空指針nullptr。
錯誤示范:
class Base{public: void func(); }// ......省略一些過程 std::map<std::string,std::shared_ptr<Base>> map_;// ......省略一些過程 map_["Jack"]->func();上面面這種錯誤情況,map_["Jack"]->func();這句話之前需要判斷map中是否存在"Jack"關鍵字,否則可能會出現當不存在"Jack"時,自動創建一個<"Jack",nullptr>,從而導致段錯誤
正確做法是:
class Base{public: void func(); } // ......省略一些過程 std::map<std::string,std::shared_ptr<Base>> map_;// ......省略一些過程代碼 if(map_.count("Jack")){map_["Jack"]->func(); //這樣就不會在沒有"Jack"時插入一個<"Jack",nullptr> }2. insert 和 emplace
對于兩種map容器std::map、std::unordered_map:
insert(std::make_pair(key, value)) 和 emplace(std::make_pair(key, value))重復插入同一個key的操作,二者都不會替換原先的key對應的value值,只有索引[]操作會改變value。
3.可以使用以下方式插入key-value鍵值對 和 更新鍵值value:
- 如果不存在key,則使用insert()和emplace()進行插入鍵值對;通過前面的知識,我們知道,也可以直接使用[]的當時直接插入鍵,并進行賦值。
- 如果存在key,則使用[]進行賦值;
總結
以上是生活随笔為你收集整理的【C++】17. map []操作符、insert()、emplace()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【c++】30.为什么可以通过指针或引用
- 下一篇: 【自动驾驶】10.百度Apollo平台