名前空間
変種
操作

std::multiset<Key,Compare,Allocator>::insert

From cppreference.com
 
 
 
 
iterator insert( const value_type& value );
(1)
iterator insert( value_type&& value );
(2) (C++11以降)
(3)
iterator insert( iterator pos, const value_type& value );
(C++11まで)
iterator insert( const_iterator pos, const value_type& value );
(C++11以降)
iterator insert( const_iterator pos, value_type&& value );
(4) (C++11以降)
template< class InputIt >
void insert( InputIt first, InputIt last );
(5)
void insert( std::initializer_list<value_type> ilist );
(6) (C++11以降)
iterator insert( node_type&& nh );
(7) (C++17以降)
iterator insert( const_iterator pos, node_type&& nh );
(8) (C++17以降)

要素をコンテナに挿入します。同値な要素の残りの順序は保持されます。

1,2) valueを挿入します。コンテナにキーが同値な要素が存在する場合、その範囲の上限に挿入されます。
3,4) posの直前の位置にできるだけ近い位置にvalueを挿入します。
5) 範囲[firstlast)から要素を挿入します。
6) 初期化子リストilistから要素を挿入します。
7) nhが空のnode handleの場合、何も行いません。そうでなければ、nhが所有する要素をコンテナに挿入し、挿入された要素を指すイテレータを返します。コンテナ内にnh.key()と同値なキーを持つ要素の範囲が存在する場合、その範囲の末尾に要素が挿入されます。nhが空でなく、かつget_allocator() != nh.get_allocator()の場合、未定義の動作となります。
8) nhが空のnode handleの場合、何も行わず、endイテレータを返します。そうでなければ、nhが所有する要素をコンテナに挿入し、nh.key()と同値なキーを持つ要素を指すイテレータを返します。要素はposの直前の位置にできるだけ近い位置に挿入されます。nhが空でなく、かつget_allocator() != nh.get_allocator()の場合、未定義の動作となります。

イテレータや参照は無効にされません。(C++17以降)挿入が成功した場合、ノードハンドル内で保持されていた要素へのポインタや参照は無効になり、ノードハンドルから抽出される前にその要素に対して取得されたポインタや参照は有効になります。

目次

[edit] パラメータ

pos - 新しい要素が挿入される前の位置へのイテレータ
value - 挿入する要素の値
first, last - 挿入する要素のソース 範囲 を定義するイテレータのペア
ilist - 挿入する値の初期化子リスト
nh - 互換性のある node handle
型要件
-
InputItLegacyInputIterator の要件を満たす必要があります。

[edit] 戻り値

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

[edit] 例外

1-4,7,8) いずれかの操作で例外がスローされた場合、挿入は行われません。
5,6) 例外安全性に関する保証はありません。

[edit] 計算量

1,2,7) O(log(size()))
3,4,8) posの直前の位置への挿入が発生する場合、償却定数時間、それ以外の場合はO(log(size()))
5,6) O(N·log(size() + N))、ここでNは挿入する要素数。

[edit]

[edit] 不具合報告

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

DR 適用対象 公開された動作 正しい動作
LWG 233 C++98 pos は単なるヒントであり、完全に無視される可能性がありました。 挿入は
pos の直前の
位置にできるだけ近い位置に
行われることが要求されました。 C++98 LWG 264
範囲[first, last)Compareに従ってソートされます。
範囲 [firstlast)Compare に従ってソートされている場合、線形時間である必要がありました。
この特別なケースでは線形要件が削除されました。
LWG 371 C++98 同値な要素の順序は保持されることが保証されていませんでした。 保持されることが要求されました。

[edit] 関連項目

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