public member function
<unordered_set>

std::unordered_set::emplace_hint

template <class... Args>iterator emplace_hint ( const_iterator position, Args&&... args );
带提示构建并插入元素
在 unordered_set 中插入一个新元素(如果其值是唯一的)。使用 args 作为元素构造函数的参数,在原地构造此新元素。position指向容器中的一个位置,该位置被建议作为搜索插入点的提示(容器可能使用也可能不使用此建议来优化插入操作)。

只有当容器中不存在与要 emplaced 的值等价的元素时,插入才会发生(unordered_set 中的元素具有唯一的值)。

如果插入成功,容器的 size 将有效增加一。

存在一个类似的成员函数 insert,它会复制或移动一个现有对象到容器中,并且也可以接受一个位置提示。

参数

position
作为插入操作的插入位置提示。该值可能被容器用来优化操作。
成员类型const_iterator是一个 forward iterator 类型。
args
传递给要插入的新元素的构造函数的参数。

返回值

如果插入成功(因为不存在具有相同值的其他元素),则函数返回指向已插入元素的迭代器。

否则,它返回一个指向容器中与该元素等价的元素的迭代器(该元素不会被替换)。

成员类型iterator是一个 forward iterator 类型。

unordered_set 中的所有迭代器都具有对元素的 const 访问权限:元素可以被插入或删除,但不能在容器中被修改。

新元素的存储使用allocator_traits<allocator_type>::construct()分配,这在失败时可能会抛出异常(对于默认的 allocatorbad_alloc如果分配请求不成功,则抛出)。

示例

还没有示例。请参阅 unordered_set::emplace 的示例。

复杂度

平均情况:常量。
最坏情况:容器大小的线性。
可能会触发 rehash(未包含)。

迭代器有效性

在大多数情况下,插入后容器中的所有迭代器都保持有效。唯一的例外是当容器的增长强制重新哈希时。在这种情况下,容器中的所有迭代器都将失效。

如果插入操作后新的容器 size 超过了其容量阈值(计算方法为容器的 bucket_count 乘以其 max_load_factor),则会强制进行 rehash。

在所有情况下,即使在 rehash 之后,引用仍然保持有效。

另见