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追加の経緯となる提案文書