unordered_multiset& operator=(const unordered_multiset& v); // (1)
unordered_multiset& operator=(unordered_multiset&& rv); // (2)
unordered_multiset & operator=(unordered_multiset&& x)
noexcept(allocator_traits<Allocator>::is_always_equal::value
&& is_nothrow_move_assignable<Hash>::value
&& is_nothrow_move_assignable<Container_move_assign>::value); // (2) C++17
unordered_multiset& operator=(initializer_list<value_type> il); // (3)
概要
unordered_multiset
オブジェクトを代入する
要件
-
(1)、および、(3) の形式の場合、以下の条件を満たすこと。
value_type
はこのコンテナに対してコピー挿入可能(CopyInsertable)であること。value_type
はコピー代入可能(CopyAssignable)であること。
-
(2) の形式の場合、
std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::value
がfalse
であれば、以下の条件を満たすこと。value_type
はこのコンテナに対してムーブ挿入可能(MoveInsertable)であること。value_type
はムーブ代入可能(MoveAssignable)であること。
効果
-
(1) :
v
の全ての要素がコピー代入される。ハッシュ関数オブジェクト、キー比較用関数オブジェクト、max_load_factor()
の値もコピーされる。 アロケータオブジェクトは、std::allocator_traits<allocator_type>::propagate_on_container_copy_assignment::value
がtrue
の場合に限りコピーされる。 -
(2) : ハッシュ関数オブジェクト、キー比較用関数オブジェクトの値はムーブされる。
max_load_factor()
の値はコピーされる。 アロケータオブジェクトは、std::allocator_traits<allocator_type>::propagate_on_container_move_assignment::value
がtrue
の場合に限りムーブされる。コンテナ内に元々存在していた要素は、代入されるか、破棄される(デストラクタが呼び出される)。 -
(3) : イテレータ範囲
[il.begin(), il.end())
がコピー代入される。 コンテナ内に元々存在していた要素は、代入されるか、破棄される(デストラクタが呼び出される)。
事後条件
以下では構築されたオブジェクトを u
とする。
- (1) :
u == v
。 - (2) :
u == 代入前の rv
。 - (3) : -
戻り値
*this
計算量
- (1) : 平均的には O(n)、ここで、
n = v.size()
。最悪のケースでは O(n2) - (2) : 線形時間。
- (3) : 代入対象を
a
、a
の型をX
とすると、a = X(il)
と同様。(備考参照)
備考
- (3) の形式の場合、計算量は
a = X(il)
と同様となっているが、効果がa = X(il)
と同様なわけではない。(ハッシュ関数オブジェクト、キー比較用関数オブジェクト、アロケータオブジェクト、max_load_factor()
等が異なる)
バージョン
言語
- C++11
処理系
- Clang: 3.0, 3.1
- GCC: 4.4.7, 4.5.3, 4.6.3, 4.7.0
- ICC: ?
- Visual C++: ?
関連項目
名前 | 説明 |
---|---|
(constructor) |
コンストラクタ |
(destructor) |
デストラクタ |
参照
- N2679 Initializer Lists for Standard Containers(Revision 1)
- (3)の経緯となる提案文書
- N4258 Cleaning-up noexcept in the Library, Rev 3
noexcept
追加の経緯となる提案文書