unordered_set::insert
将一个元素或元素范围插入到 unordered_set 中。
// (1) single element pair<iterator, bool> insert( const value_type& Val ); // (2) single element, perfect forwarded template<class ValTy> pair<iterator, bool> insert( ValTy&& Val ); // (3) single element with hint iterator insert( const_iterator Where, const value_type& Val ); // (4) single element, perfect forwarded, with hint template<class ValTy> iterator insert( const_iterator Where, ValTy&& Val ); // (5) range template<class InputIterator> void insert( InputIterator First, InputIterator Last ); // (6) initializer list void insert( initializer_list<value_type> IList );
参数
参数 |
描述 |
Val |
要插入到 unordered_set 中的元素的值(除非它已经包含一个具有相对有序的键的元素)。 |
Where |
开始搜索正确插入点的位置。 |
ValTy |
指定 unordered_set 可用于构造 value_type 元素的参数类型并将 Val 作为参数完美转发的模板参数。 |
First |
要复制的第一个元素的位置。 |
Last |
要复制的最后一个元素以外的位置。 |
InputIterator |
满足输入迭代器要求的模板函数参数,该输入迭代器指向可用于构造 value_type 对象的类型的元素。 |
IList |
从中复制元素的 initializer_list。 |
返回值
单个元素成员函数 (1) 和 (2) 将返回 pair,如果完成插入,则其 bool 组件为 true;如果 unordered_set 已经包含一个其键在排序中具有等效值的元素,则为 false。 返回值对的迭代器组件将指向新插入的元素(如果 bool 组件为 true)或现有元素(如果 bool 组件为 false)。
附带提示的单个元素成员函数 (3) 和 (4) 将返回迭代器,该迭代器指向将新元素插入到 unordered_multimap 中的位置,如果具有等效键的元素已经存在,则指向现有元素。
备注
任何迭代器、指针或引用都不会因为此函数而失效。
在只插入单个元素的过程中,如果引发异常,但是异常并未在容器的哈希函数中发生,则不会修改该容器的状态。 如果在哈希函数中引发异常,则未定义此结果。 在插入多个元素的过程中,如果引发异常,则会使容器处于未指定但有效的状态。
要访问单个元素成员函数返回的 pair pr 的迭代器组件,请使用 pr.first;要在返回的配对中取消引用迭代器,请使用 *pr.first,从而向你提供一个元素。 要访问 bool 组件,请使用 pr.second。 有关示例,请参阅本文后面的示例代码。
容器的 value_type 是属于该容器的 typedef;对于集合,unordered_set<V>::value_type 是 const V 类型。
范围成员函数 (5) 将元素值序列插入到 unordered_set 中,它对应于迭代器在范围 [First, Last) 中所处理的每一个元素;因此,不会插入 Last。 容器成员函数 end() 是指容器中最后一个元素之后的位置,例如,s.insert(v.begin(), v.end()); 语句尝试将 v 的所有元素插入到 s 中。 只插入在该范围中具有唯一值的元素;忽略副本。 若要观察拒绝了哪些元素,请使用单个元素版本的 insert。
初始值设定项列表成员函数 (6) 使用 initializer_list 将元素复制到 unordered_set 中。
有关就地构造的元素的插入(即不会执行复制或移动操作),请参阅 set::emplace 和 set::emplace_hint。
有关代码示例,请参阅 set::insert。
要求
标头:<unordered_set>
命名空间: std