名前空間
変種
操作

std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>::insert

From cppreference.com
 
 
 
 
ヘッダ <unordered_map> で定義
iterator insert( const value_type& value );
(1) (C++11以降)
iterator insert( value_type&& value );
(2) (C++17以降)
template< class P >
iterator 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以降)
iterator insert( node_type&& nh );
(9) (C++17以降)
iterator insert( const_iterator hint, node_type&& nh );
(10) (C++17以降)

要素をコンテナに挿入します。

1-3) value を挿入します。
overload (3)emplace(std::forward<P>(value)) と同等であり、std::is_constructible<value_type, P&&>::value == true の場合のみオーバーロード解決に参加します。
4-6) valueを挿入します。hintは検索を開始する場所の非拘束的なヒントとして使用されます。
overload (6)emplace_hint(hint, std::forward<P>(value)) と同等であり、std::is_constructible<value_type, P&&>::value == true の場合のみオーバーロード解決に参加します。
7) 範囲[firstlast)から要素を挿入します。
範囲[firstlast)有効な範囲でない場合、またはfirstまたはlast*thisのイテレータである場合、動作は未定義です。
8) 初期化子リストilistから要素を挿入します。
9) nhが空のノードハンドルの場合、何も行いません。それ以外の場合、nhが所有する要素をコンテナに挿入し、挿入された要素を指すイテレータを返します。 nhが空でなく、かつget_allocator() != nh.get_allocator()の場合、動作は未定義です。
10) nhが空のノードハンドルの場合、何も行わず、endイテレータを返します。それ以外の場合、nhが所有する要素をコンテナに挿入し、nh.key()にキーが等しい要素を指すイテレータを返します。hintは検索を開始する場所の非拘束的なヒントとして使用されます。 nhが空でなく、かつget_allocator() != nh.get_allocator()の場合、動作は未定義です。

操作後の要素数が、現在の max_load_factor() * bucket_count() より大きい場合、再ハッシュが行われます。
挿入による再ハッシュが発生した場合、すべてのイテレータは無効になります。それ以外の場合(再ハッシュが発生しない場合)、イテレータは無効になりません。挿入が成功した場合、ノードハンドル内で保持されている間、その要素へのポインタと参照は無効になります。また、要素がノードハンドルから抽出される前に取得したその要素へのポインタと参照は有効になります。(C++17 以降)

目次

[edit] パラメータ

hint - 挿入するコンテンツのヒントとして使用されるイテレータ
value - 挿入する要素の値
first, last - 挿入する要素のソース 範囲 を定義するイテレータのペア
ilist - 挿入する値の初期化子リスト
nh - 互換性のある node handle
型要件
-
InputItLegacyInputIterator の要件を満たす必要があります。

[edit] 戻り値

1-6) 挿入された要素へのイテレータ。
7,8) (なし)
9,10) nhが空であった場合はendイテレータ、それ以外の場合は挿入された要素を指すイテレータ。

[edit] 例外

1-6) いかなる理由であれ例外がスローされた場合、これらの関数は何も行いません(strong exception safety guarantee)。
7,8) 例外安全性保証はありません。
9,10) いかなる理由であれ例外がスローされた場合、これらの関数は何も行いません(strong exception safety guarantee)。

[edit] 計算量

1-6) 平均ケース:O(1)、最悪ケース:O(size())
7,8) 平均ケース:O(N)、ここでNは挿入する要素数です。最悪ケース:O(N * size() + N)
9,10) 平均ケース:O(1)、最悪ケース:O(size())

[edit]

[edit] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 2005 C++11 オーバーロード (3,6) は、オーバーロード解像度に参加するのは Pvalue_type に暗黙的に変換可能な場合のみです。
value_typeP&& から構築可能な場合のみ参加します。
value_typeP&& から構築可能な場合のみ参加します。
P&& から構築可能な場合のみ参加します。

[edit] 関連項目

要素を直接構築する
(公開メンバ関数) [編集]
ヒントを使用して要素を直接構築する
(公開メンバ関数) [編集]
引数から推論された型の std::insert_iterator を作成する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)