public member function
<queue>

std::priority_queue::emplace

template <class... Args> void emplace (Args&&... args);
构造并插入元素
priority_queue 添加一个新元素。新元素将在原地构造,并将 args 作为其构造函数的参数传递。

此成员函数实际上会调用底层容器的成员函数 emplace_back,将 args 转发给它,然后通过对包含容器中所有元素的范围调用 push_heap 算法来将其重新排序到中的位置。

参数

args
转发给构造新元素的参数。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// priority_queue::emplace
#include <iostream>       // std::cout
#include <queue>          // std::priority_queue
#include <string>         // std::string

int main ()
{
  std::priority_queue<std::string> mypq;

  mypq.emplace("orange");
  mypq.emplace("strawberry");
  mypq.emplace("apple");
  mypq.emplace("pear");

  std::cout << "mypq contains:";
  while (!mypq.empty())
  {
     std::cout << ' ' << mypq.top();
     mypq.pop();
  }
  std::cout << '\n';

  return 0;
}

输出

mypq contains: strawberry pear orange apple


复杂度

底层容器调用一次 emplace_back,并对包含底层容器所有元素的范围调用一次 push_heap

数据竞争

容器及其最多所有包含的元素都会被修改。

异常安全

提供与对底层容器对象执行的操作相同的保证级别。

另见