std::
multimap::emplace_hint
公众成员函数 <map>
template <class... Args>
iterator emplace_hint (const_iterator position, Args&&... args);
构造插入元素并加提示
在multimap中插入一个新元素,并提示插入位置。
这个新元素是使用
args作为
value_type(它是
pair类型的对象)构造的参数即时构造的
等价元素的相对顺序保持不变,新插入的元素跟随着容器中已经存在的等价元素。
position中的值用作插入点上的提示。尽管如此,
元素仍将按照其内部比较对象描述的顺序插入到其相应的位置,
但这个提示使用函数插入点开始搜索,当实际插入点位于该位置或接近该位置时,该过程将大大加快。
该元素通过调用
allocator_traits::construct函数即时构造,参数被转发。
☲ 参数
-
position
-
元素可插入位置的提示。
如果位置指向插入元素后面的元素(如果是最后一个元素,则指向end),则该函数优化其插入时间.
注意,这并不强制新元素位于multimap中的那个位置(映射中的元素总是遵循特定的顺序)。
Const_iterator是一个成员类型,定义为指向元素的双向迭代器类型。
-
args
-
C++11: 参数,用于为插入的元素构造映射类型的新对象。
C++14: 被转发来构造新元素(类型pair<const key_type, multimapped_type>)的参数。
这可以是:
- 两个参数:一个为键,另一个为映射的值。
- pair类型的单个参数,键值作为第一个成员,映射值作为第二个成员。
- piecewise_construct作为第一个参数,另外两个元组参数分别作为键值和映射值的参数转发。
请参阅pair::pair了解更多信息。
☉ 返回值
指向新插入元素的迭代器。
成员类型
iterator是指向元素的双向迭代器类型。
☣ 示例
// multimap::emplace_hint
#include <iostream>
#include <string>
#include <map>
int main ()
{
std::multimap<std::string,int> mymultimap;
auto it = mymultimap.end();
it = mymultimap.emplace_hint(it,"foo",10);
mymultimap.emplace_hint(it,"bar",20);
mymultimap.emplace_hint(mymultimap.end(),"foo",30);
std::cout << "mymultimap contains:";
for (auto& x: mymultimap)
std::cout << " [" << x.first << ':' << x.second << ']';
std::cout << '\n';
return 0;
}
|
输出:
mymultimap contains: [bar:20] [foo:10] [foo:30]
✥ 复杂度
一般来说,容器大小为对数。
如果元素的插入点是
position,则为平摊常数。
☣ 迭代器的有效性
不变.
⇄ 数据竞争
容器被修改。
并发地访问现有元素是安全的,但迭代容器中的范围则不安全。
☂ 异常安全性
强保证:如果抛出异常,容器中不会有任何变化。
如果
allocator_traits::construct不支持相应的参数,它会导致未定义行为。
🍄 另请参阅
multimap::emplace |
构造插入元素(公众成员函数) |
multimap::insert |
插入元素(公众成员函数) |
multimap::erase |
删除元素(公众成员函数) |