做企业网站报价,旅游企业网站建设,网站备案号是什么意思,长沙理财网站建设我们在使用stl的映射容器std::map时#xff0c;经常需要向容器中插入数据。由于map的元素key值是唯一的#xff0c;我们经常遇到这样的场景#xff1a;
向map中插入元素时#xff0c;指定的key已经存在则直接更新#xff1b;指定的key不存在#xff0c;然后才做插入操作…我们在使用stl的映射容器std::map时经常需要向容器中插入数据。由于map的元素key值是唯一的我们经常遇到这样的场景
向map中插入元素时指定的key已经存在则直接更新指定的key不存在然后才做插入操作
通用的做法可以直接用emplace操作判断指定的key是否存在如果不存在则插入元素。当元素存在的时候emplace依然会构造一次带待插入元素判断不需要插入后将该元素析构这样导致的后果是产生了多余的构造和析构操作。
C17引入了std::try_emplace方法在参数列表中把key和value分开该方法会检测指定的key是否存在如果存在什么也不做不存在则插入相应的value。
此外C17为map容器还新增了insert_or_assign方法让我们无需像之前一样额外编写先判断是否存在不存在则插入存在则更新的代码了。
#include iostream
#include string
#include mapusing namespace std;int main()
{mapstring, string mapTest{ {花木兰,边路},{甄姬,中单},{后羿,射手},{蔡文姬,射手},{东方曜,打野} };auto [hero, position] mapTest.try_emplace(韩信, 第六人);for (auto [h, p] : mapTest){cout h : p endl;}cout -------------------------------------------------- endl;auto [hero1, position1] mapTest.try_emplace(东方曜,边路);for (auto [h, p] : mapTest){cout h : p endl;}cout -------------------------------------------------- endl;auto [hero2, position2] mapTest.insert_or_assign(东方曜, 边路);for (auto [h, p] : mapTest){cout h : p endl;}cout -------------------------------------------------- endl;auto [hero3, position3] mapTest.insert_or_assign(马超, 龙虎双边);for (auto [h, p] : mapTest){cout h : p endl;}return 0;
}