名前空間
変種
操作

std::unordered_map<Key,T,Hash,KeyEqual,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_typestd::forward<M>(obj) が代入されます。キーが存在しない場合は、 insert によって行われたかのように、新しい値が value_type(k, std::forward<M>(obj)) から構築されて挿入されます。
2,4)(1,3) と同様ですが、値は value_type(std::move(k), std::forward<M>(obj)) から構築されます。

挿入が行われ、それによってコンテナの再ハッシュが発生した場合、すべてのイテレータが無効化されます。 そうでなければ、イテレータは影響を受けません。 参照は無効化されません。 再ハッシュは新しい要素数が max_load_factor()*bucket_count() より大きい場合にのみ発生します。

目次

[編集]引数

k - 検索および見つからなかった場合の挿入の両方に使われるキー
hint - 前に新しい要素が挿入される位置を指すイテレータ
obj - 挿入または代入する値

[編集]戻り値

1,2) bool 部分は、挿入が行われた場合は true、代入が行われた場合は false になります。 イテレータ部分は、挿入または更新された要素を指します。
3,4) 挿入または更新された要素を指すイテレータ。

[編集]計算量

1,2)emplace と同じ。
3,4)emplace_hint と同じ。

[編集]ノート

insert_or_assignoperator[] より多くの情報を返し、マップされる型のデフォルト構築可能性を要求しません。

[編集]

#include <iostream>#include <unordered_map>#include <string>   int main(){std::unordered_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(constauto&pair : myMap){std::cout<< pair.first<<" : "<< pair.second<<'\n';}}

出力例:

c : clementine a : apple b : bannana

[編集]関連項目

指定された要素にアクセスまたは挿入します
(パブリックメンバ関数)[edit]
境界チェック付きで指定された要素にアクセスします
(パブリックメンバ関数)[edit]
要素またはノード(C++17以上)を挿入します
(パブリックメンバ関数)[edit]
要素をその場で構築します
(パブリックメンバ関数)[edit]
close