std::unordered_map<Key,T,Hash,KeyEqual,Allocator>:: insert
|
std::
pair
<
iterator,
bool
>
insert
(
const
value_type
&
value
)
;
|
(1) | (C++11以降) |
|
std::
pair
<
iterator,
bool
>
insert
(
value_type
&&
value
)
;
|
(2) | (C++17以降) |
|
template
<
class
P
>
std:: pair < iterator, bool > insert ( P && value ) ; |
(3) | (C++11以降) |
|
iterator insert
(
const_iterator hint,
const
value_type
&
value
)
;
|
(4) | (C++11以降) |
|
iterator insert
(
const_iterator hint, value_type
&&
value
)
;
|
(5) | (C++17以降) |
|
template
<
class
P
>
iterator insert ( const_iterator hint, P && value ) ; |
(6) | (C++11以降) |
|
template
<
class
InputIt
>
void insert ( InputIt first, InputIt last ) ; |
(7) | (C++11以降) |
|
void
insert
(
std::
initializer_list
<
value_type
>
ilist
)
;
|
(8) | (C++11以降) |
|
insert_return_type insert
(
node_type
&&
nh
)
;
|
(9) | (C++17以降) |
|
iterator insert
(
const_iterator hint, node_type
&&
nh
)
;
|
(10) | (C++17以降) |
コンテナに要素を挿入します。ただし、同等のキーを持つ要素がコンテナにまだ含まれていない場合に限ります。
操作後に新しい要素数が元の
max_load_factor()
*
bucket_count()
より大きくなる場合、リハッシュが発生します。
リハッシュが発生した場合(挿入による)、すべてのイテレータは無効化されます。それ以外の場合(リハッシュなし)、イテレータは無効化されません。
挿入が成功した場合、ノードハンドル内に保持されている間に取得された要素へのポインタと参照は無効化され、抽出前にその要素に対して取得されたポインタと参照は有効になります。
(C++17以降)
目次 |
パラメータ
| hint | - | 挿入位置のヒントとして使用するイテレータ |
| value | - | 挿入する要素の値 |
| first, last | - | 挿入する要素のソース範囲を定義するイテレータのペア range |
| ilist | - | 値を挿入する初期化子リスト |
| nh | - | 互換性のある node handle |
| 型要件 | ||
-
InputIt
は
LegacyInputIterator
の要件を満たさなければならない。
|
||
戻り値
insert_return_type
のオブジェクトが以下のようにメンバーが初期化される:
-
nh
が空の場合、
insertedは false 、positionは end ( ) 、nodeは空となる。 -
挿入が行われた場合、
insertedは true 、positionは挿入された要素を指し、nodeは空となる。 -
挿入が失敗した場合、
insertedは false 、nodeは nh の前の値を持ち、positionは nh. key ( ) と等価なキーを持つ要素を指す。
例外
計算量
O(1)
、最悪ケース
O(size())
。
O(N)
、ここでNは挿入する要素の数。最悪ケース:
O(N * size() + N)
。
O(1)
、最悪ケース
O(size())
。
注記
ヒント付き挿入
(
(
4-6
)
および
(
10
)
)は、
std::vector::insert
のようなシーケンシャルコンテナに対する位置指定挿入とのシグネチャ互換性を保つため、ブール値を返しません。これにより、
std::inserter
のような汎用インサーターを作成することが可能になります。ヒント付き挿入の成功を確認する一つの方法は、挿入前後の
size()
を比較することです。
例
#include <iostream> #include <string> #include <unordered_map> int main () { std::unordered_map<int, std::string> dict = {{1, "one"}, {2, "two"}}; dict.insert({3, "three"}); dict.insert(std::make_pair(4, "four")); dict.insert({{4, "another four"}, {5, "five"}}); const bool ok = dict.insert({1, "another one"}).second; std::cout << "inserting 1 => \"another one\" " << (ok ? "succeeded" : "failed") << '\n'; std::cout << "contents:\n"; for (auto& p : dict) std::cout << ' ' << p.first << " => " << p.second << '\n'; }
出力例:
inserting 1 => "another one" failed contents: 5 => five 1 => one 2 => two 3 => three 4 => four
欠陥報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2005 | C++11 |
オーバーロード
(
3
)
と
(
6
)
は
P
が
value_type
に暗黙変換可能な場合のみ
オーバーロード解決に参加していた |
value_type
が
P
&&
から構築可能な場合のみ参加
|
関連項目
|
要素をその場で構築する
(public member function) |
|
|
ヒントを使用して要素をその場で構築する
(public member function) |
|
|
(C++17)
|
要素を挿入するか、キーが既に存在する場合は現在の要素に代入する
(public member function) |
|
引数から推論された型の
std::insert_iterator
を作成する
(function template) |