C++优先队列emplace
时间: 2023-09-23 10:05:30 浏览: 186
优先级队列的C++实现
`std::priority_queue` 是 C++ 中的一个容器适配器,它提供了一种优先级队列的实现方式。在优先队列中,元素按照一定的优先级顺序排列,并且每次从队列中取出的元素都是优先级最高的。
`emplace` 是 `std::priority_queue` 提供的一个成员函数,用于在优先队列中插入元素。与 `push` 函数相比,`emplace` 允许我们直接在队列中构造元素,而不需要显式地创建一个对象并将其传递给 `push`。
例如,假设我们有一个结构体 `Person`,包含姓名和年龄两个成员变量:
```cpp
struct Person {
std::string name;
int age;
};
```
我们可以定义一个优先队列,其中元素按照年龄从小到大排序:
```cpp
std::priority_queue<Person, std::vector<Person>, std::greater<Person>> pq;
```
然后,我们可以使用 `emplace` 函数插入新的 `Person` 对象:
```cpp
pq.emplace("Alice", 25);
pq.emplace("Bob", 30);
pq.emplace("Charlie", 20);
```
这样,队列中的元素就会按照年龄从小到大的顺序排列。
需要注意的是,使用 `emplace` 函数时,参数必须与元素类型的构造函数相匹配。在上面的例子中,我们传递了一个字符串和一个整数作为参数,与 `Person` 的构造函数匹配。
阅读全文