C++ priority_queue::emplace() 函数



优先级队列的 C++ std::priority_queue::emplace() 函数用于插入元素。它直接构造并插入一个新元素到队列中,利用移动语义来优化性能。与 push() 函数不同,它直接将参数转发给元素类型的构造函数,允许更灵活和高效的元素创建。此函数的时间复杂度是对数级的。

语法

以下是 std::priority_queue::emplace() 函数的语法。

void emplace (Args&&... args);

参数

  • args − 用于构造新元素的参数。

返回值

此函数不返回任何值。

示例

让我们来看下面的例子,我们将使用 emplace() 函数。

#include <iostream>
#include <queue>
int main()
{
    std::priority_queue<int> a;
    a.emplace(1);
    a.emplace(2);
    a.emplace(11);
    while (!a.empty()) {
        std::cout << a.top() << " ";
        a.pop();
    }
    return 0;
}

输出

以上代码的输出如下:

11 2 1 

示例

考虑下面的例子,我们将使用带有 pair 值的 emplace() 函数。

#include <iostream>
#include <queue>
#include <vector>
int main()
{
    std::priority_queue<std::pair<int, int>> a;
    a.emplace(1, 2);
    a.emplace(2, 3);
    a.emplace(3, 4);
    while (!a.empty()) {
        auto p = a.top();
        std::cout << "(" << p.first << ", " << p.second << ") ";
        a.pop();
    }
    return 0;
}

输出

如果运行以上代码,将生成以下输出:

(3, 4) (2, 3) (1, 2) 

示例

在下面的例子中,我们将使用带有元组的 emplace() 函数。

#include <iostream>
#include <queue>
#include <tuple>
#include <vector>
int main()
{
    std::priority_queue<std::tuple<int, int, int>> x;
    x.emplace(1, 2, 3);
    x.emplace(3, 4, 5);
    while (!x.empty()) {
        auto [a, b, c] = x.top();
        std::cout << "(" << a << ", " << b << ", " << c << ") ";
        x.pop();
    }
    return 0;
}

输出

以下是以上代码的输出:

(3, 4, 5) (1, 2, 3)
priority_queue.htm
广告
© . All rights reserved.