public member function
<unordered_set>
template <class... Args> iterator emplace ( Args&&... args );
Construct and insert element
Inserts a new element in the unordered_multiset. This new element is constructed in place using args as the arguments for the element's constructor.
This effectively increases the container size by one.
A similar member function exists, insert, which either copies or moves existing objects into the container.
参数
- args
- 传递给要插入的新元素的构造函数的参数。
返回值
指向新插入元素的迭代器。
成员类型iterator是一个 forward iterator 类型。
unordered_multiset 中的所有迭代器都对元素具有 const 访问权限:可以插入或移除元素,但在容器中不能修改它们。
新元素的存储使用allocator_traits<allocator_type>::construct()分配,这在失败时可能会抛出异常(对于默认的 allocator,bad_alloc如果分配请求不成功,则抛出)。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
// unordered_multiset::emplace
#include <iostream>
#include <string>
#include <unordered_set>
int main ()
{
std::unordered_multiset<std::string> myums;
myums.emplace ("milk");
myums.emplace ("tea");
myums.emplace ("coffee");
myums.emplace ("milk");
std::cout << "myums contains:";
for (const std::string& x: myums) std::cout << " " << x;
std::cout << std::endl;
return 0;
}
|
可能的输出
myset contains: tea coffee milk milk
|
复杂度
平均情况:常量。
最坏情况:容器大小的线性。
可能会强制执行 rehash(未包含)。
迭代器有效性
在大多数情况下,插入后容器中的所有迭代器都保持有效。唯一的例外是当容器的增长强制重新哈希时。在这种情况下,容器中的所有迭代器都将失效。
A rehash is forced if the new container size after the insertion operation would increase above its capacity threshold (calculated as the container's bucket_count multiplied by its max_load_factor).
在所有情况下,容器中元素的引用在 rehash 之后仍然有效。