std::
unordered_set::operator=
公众成员函数 <unordered_set>
copy (1) |
unordered_set& operator= (const unordered_set& ust);
|
move (2) |
unordered_set& operator= (unordered_set&& ust);
|
initializer list (3) |
unordered_set& operator= (initializer_list<value_type> il);
|
分配容器的内容
指定ust(或il)作为容器的新内容。
销毁调用前对象中包含的元素,并替换为unordered_set ust或initializer list il中的元素(如果有的话)。
在调用之前保存在容器中的任何元素要么被赋值,要么被销毁。
第一个版本(1)执行复制赋值,将ust的所有元素复制到容器对象中(ust保留其内容)。
第二个版本(2)执行移动赋值,将ust内容的所有权转移到对象。没有副本产生:内容被ust丢失。
第三个版本(3)将初始化列表il的内容赋值为容器对象的元素。
☲ 参数
-
ust
-
同一类型的unordered_set对象(即具有相同模板形参)
-
il
-
一个初始化列表对象。编译器将自动从初始化列表声明符构造此类对象。
成员类型value_type是容器中元素的类型,在 unordered_set 中定义为其第一个模板形参(Key)的别名。
☉ 返回值
*this
☣ 示例
// unordered_set::operator=
#include <iostream>
#include <string>
#include <unordered_set>
template<class T>
T cmerge (T a, T b) {
T t(a); t.insert(b.begin(),b.end()); return t;
}
int main ()
{
std::unordered_set<std::string> first, second, third;
first = {"red","green","blue"}; // init list
second = {"orange","pink","yellow"}; // init list
third = cmerge (first, second); // move
first = third; // copy
std::cout << "first contains:";
for (const std::string& x: first) std::cout << " " << x;
std::cout << std::endl;
return 0;
}
|
可能输出:
first contains: orange blue red pink yellow green
✥ 复杂度
对于复制赋值(1):线性大小(销毁,复制)。
对于move赋值(2):在当前容器大小中线性(销毁)。*
对于初始化器列表赋值(3):一般来说,大小是线性的(销毁,移动赋值)—--—最坏情况是二次方。
*如果分配器没有传递,则会增加分配的复杂性。
☣ 迭代器的有效性
在调用之前,容器中所有的迭代器、引用和指向元素的指针都将失效。
🍄 另请参阅
unordered_set::unordered_set |
构建unordered_set对象(公众成员函数) |
unordered_set::emplace |
构造和插入元素(公众成员函数) |