Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

multimap::emplace

公众成员函数  <map>
template <class... Args>
  iterator emplace (Args&&... args);

构造并插入元素

在multimap中插入一个新元素。这个新元素是使用args作为value_type (它是pair类型的对象)构造的参数即时构造。

在内部,multimap容器按照其比较对象指定的标准,按它们的键对所有元素排序。元素总是按照此顺序插入到其各自的位置。

该元素通过调用allocator_traits::construct来构造,并传递args

具有等效键的元素的相对顺序被保留,新插入的元素紧随容器中已经具有等效键的元素。
存在一个类似的成员函数 insert,它复制或移动现有的对象到容器中。

☲  参数


args
C++11: 用于构造新元素的参数。

C++14: 被转发来构造新元素(类型pair<const key_type, multimapped_type>)的参数。
这可以是:
- 两个参数:一个为键,另一个为映射的值。
- pair类型的单个参数,键值作为第一个成员,映射值作为第二个成员。
- piecewise_construct作为第一个参数,另外两个元组参数分别作为键值和映射值的参数转发。
请参阅pair::pair了解更多信息。

☉  返回值



指向新插入元素的迭代器。

成员类型iterator是指向元素的双向迭代器类型。

☣  示例



// multimap::emplace
#include <iostream>
#include <string>
#include <map>

int main ()
{
  std::multimap<std::string,float> mymultimap;

  mymultimap.emplace("apple",1.50);
  mymultimap.emplace("coffee",2.10);
  mymultimap.emplace("apple",1.40);

  std::cout << "mymultimap contains:";
  for (auto& x: mymultimap)
    std::cout << " [" << x.first << ':' << x.second << ']';
  std::cout << '\n';

  return 0;
}

输出:
mymultimap contains: [apple:1.5] [apple:1.4] [coffee:2.1]

✥ 复杂度



容器大小:对数。

☣ 迭代器的有效性



不变.

⇄ 数据竞争


容器被修改。
并发地访问现有元素是安全的,但迭代容器中的范围则不安全。

☂ 异常安全性



强保证:如果抛出异常,容器中不会有任何变化。
如果allocator_traits::construct不支持相应的参数,它会导致未定义行为。

🍄  另请参阅



multimap::emplace_hint 构造插入元素并加提示(公众成员函数)
multimap::insert 插入元素(公众成员函数)
multimap::erase 删除元素(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图