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
廣告