C++ priority_queue::swap() 函式



C++ 的std::priority_queue::swap()函式用於高效地交換優先佇列,確保交換內容而不改變內容。它保持每個佇列中元素的優先順序順序。

swap() 函式可以以兩種方式呼叫:作為成員函式或作為非成員函式。當用作成員函式時,swap() 的時間複雜度為常數,即 O(1),否則當用作非成員函式時為線性,即 O(n)。您可以找到下面兩種方法的語法。

語法

以下是 std::priority_queue::swap() 函式的語法。

void swap (priority_queue& x) noexcept;
or
void swap (queue<T,Container,Compare>& q1,queue <T,Container,Compare>& q2) noexcept;

引數

  • x − 表示另一個相同型別的優先佇列物件。
  • q1 − 表示第一個 priority_queue 物件。
  • q2 − 表示第二個 priority_queue 物件。

返回值

此函式不返回任何值。

示例

讓我們來看下面的例子,我們將交換兩個優先佇列。

#include <iostream>
#include <queue>
int main()
{
    std::priority_queue<int> a, b;
    a.push(1);
    a.push(2);
    b.push(11);
    b.push(22);
    a.swap(b);
    std::cout << "After swapping:";
    std::cout << "\nPriority_queue1: ";
    while (!a.empty()) {
        std::cout << a.top() << " ";
        a.pop();
    }
    std::cout << "\nPriority_queue2: ";
    while (!b.empty()) {
        std::cout << b.top() << " ";
        b.pop();
    }
    return 0;
}

輸出

以上程式碼的輸出如下:

After swapping:
Priority_queue1: 22 11 
Priority_queue2: 2 1 

示例

考慮以下示例,我們將交換一個非空佇列和一個空佇列,並觀察輸出。

#include <iostream>
#include <queue>
int main()
{
    std::priority_queue<int> a, b;
    a.push(1);
    a.push(2);
    a.swap(b);
    std::cout << "After swapping:\n";
    std::cout << "Priority_queue1 is empty";
    std::cout << "\nPriority_queue2: ";
    while (!b.empty()) {
        std::cout << b.top() << " ";
        b.pop();
    }
    return 0;
}

輸出

以上程式碼的輸出如下:

After swapping:
Priority_queue1 is empty
Priority_queue2: 2 1 

示例

在下面的示例中,我們將使用帶有移動語義的 swap() 函式來交換包含字串的優先佇列。

#include <iostream>
#include <queue>
#include <utility>
int main()
{
    std::priority_queue<std::string> a, b;
    a.push("Hi");
    a.push("Hello");
    b.push("Namaste");
    b.push("Vanakam");
    std::swap(a, b);
    std::cout << "\n\nAfter swapping:\n";
    std::cout << "Priority_queue1: ";
    while (!a.empty()) {
        std::cout << a.top() << " ";
        a.pop();
    }
    std::cout << "\nPriority_queue2: ";
    while (!b.empty()) {
        std::cout << b.top() << " ";
        b.pop();
    }
    return 0;
}

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

After swapping:
Priority_queue1: Vanakam Namaste 
Priority_queue2: Hi Hello 
priority_queue.htm
廣告