std::map<Key,T,Compare,Allocator>::insert_or_assign
提供: cppreference.com
template <class M> pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj); |
(1) | (C++17以上) |
template <class M> pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj); |
(2) | (C++17以上) |
template <class M> iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); |
(3) | (C++17以上) |
template <class M> iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj); |
(4) | (C++17以上) |
1,3) コンテナに
k と等しいキーがすでに存在する場合は、キー k に対応する mapped_type に std::forward<M>(obj) が代入されます。キーが存在しない場合は、 insert によって行われたかのように、新しい値が value_type(k, std::forward<M>(obj)) から構築されて挿入されます。2,4) (1,3) と同様ですが、値は
value_type(std::move(k), std::forward<M>(obj)) から構築されます。どのイテレータも参照も無効化されません。
引数
| k | - | 検索および見つからなかった場合の挿入の両方に使われるキー |
| hint | - | 前に新しい要素が挿入される位置を指すイテレータ |
| obj | - | 挿入または代入する値 |
戻り値
1,2) bool 部分は、挿入が行われた場合は
true、代入が行われた場合は false になります。 イテレータ部分は、挿入または更新された要素を指します。3,4) 挿入または更新された要素を指すイテレータ。
計算量
1,2) emplace と同じ。
3,4) emplace_hint と同じ。
ノート
insert_or_assign は operator[] より多くの情報を返し、マップされる型のデフォルト構築可能性を要求しません。
例
Run this code
#include <iostream>
#include <map>
#include <string>
int main()
{
std::map<std::string, std::string> myMap;
myMap.insert_or_assign("a", "apple" );
myMap.insert_or_assign("b", "bannana" );
myMap.insert_or_assign("c", "cherry" );
myMap.insert_or_assign("c", "clementine");
for (const auto &pair : myMap) {
std::cout << pair.first << " : " << pair.second << '\n';
}
}
出力:
a : apple
b : bannana
c : clementine
関連項目
| 指定された要素にアクセスまたは挿入します (パブリックメンバ関数) | |
(C++11) |
境界チェック付きで指定された要素にアクセスします (パブリックメンバ関数) |
| 要素またはノード (C++17以上)を挿入します (パブリックメンバ関数) | |
(C++11) |
要素をその場で構築します (パブリックメンバ関数) |