上述实例代码可以看到:insert_or_assign方法与 try_emplace的不同之处在于,如果对应的key已经存在,使用insert_or_assign会将新的value值赋值给已经存在的key(建立新的键值对映射)。
上述实例代码可以看到:insert_or_assign方法与 try_emplace的不同之处在于,如果对应的key已经存在,使用insert_or_assign会将新的value值赋值给已经存在的key(建立新的键值对映射)。
鉴于此,C++17引入了std::try_emplace,在参数列表中,把key和value分开,该方法会检测指定的key是否存在,如果存在,什么也不做,不存在,则插入相应的value。 此外,C++17为map容器还新增了insert_or_assign方法,让我们无需像之前一样,额外编写先判断是否存在,不存在则插入,存在则更新的代码了。 废话不多说,看简单的d...
PrintMap("insert Tom:14(try_emplace)",map_user_age); auto[iter_jim,inserted_jim]=map_user_age.try_emplace("Jim",14); PrintMap("insert Jim:14(try_emplace)",map_user_age); auto[iter_neo,inserted_neo]=map_user_age.insert_or_assign("Neo",18); PrintMap("insert Neo:18(insert_or_...
C++17新特性之try_emplace与insert_or_assign 简介:由于std::map中,元素的key是唯一的,我们经常遇到这样的场景,向map中插入元素时,先检测map指定的key是否存在,不存在时才做插入操作,如果存在,直接取出来使用,或者key不存在时,做插入操作,存在时做更新操作。
我使用的是c++17 https://en.cppreference.com/w/cpp/container/map/insert_or_assign的insert_or_assign,这说明映射值是使用右值引用构造的下面是我的自定义类,我将其用作键。接下来是值,我将其用作向量。当我尝试使用统一初始化时,我得到了编译错误。而且,如果我使用std::pair,我仍然会 ...
std::map<Key,T,Compare,Allocator>::insert_or_assign template<classM> std::pair<iterator,bool>insert_or_assign(constKey&k, M&&obj); (1)(since C++17) template<classM> std::pair<iterator,bool>insert_or_assign(Key&&k, M&&obj);
insert_or_assign返回比operator[]并且不要求映射类型的默认可构造性。 例 另见 operator[] access specified element (public member function) at access specified element with bounds checking (public member function) insert inserts elements or nodes (since C++17) (public member function) emplace constructs...
std::pair<iterator,bool>insert_or_assign(constKey&k, M&&obj); (1)(since C++17) template<classM> std::pair<iterator,bool>insert_or_assign(Key&&k, M&&obj); (2)(since C++17) template<classK,classM> std::pair<iterator,bool>insert_or_assign(K&&k, M&&obj); ...
iterator insert_or_assign(const_iterator hint, K&&k, M&&obj); (6)(C++26 起) 1,4)若等价于k的键已存在于容器中,则赋值std::forward<M>(obj)给对应键k的mapped_type。若键不存在,则如同用insert插入从value_type(k,std::forward<M>(obj))构造的新值。