命名空间
变体
操作

std::swap(std::priority_queue)

来自 cppreference.com
< cpp‎ | 容器‎ | 优先队列
定义在头文件 <queue>
template< class T, class Container, class Compare >

void swap( std::priority_queue<T, Container, Compare>& lhs,

           std::priority_queue<T, Container, Compare>& rhs );
(自 C++11 起)
(直到 C++17)
template< class T, class Container, class Compare >

void swap( std::priority_queue<T, Container, Compare>& lhs,
           std::priority_queue<T, Container, Compare>& rhs )

               noexcept(/* 见下文 */);
(自 C++17 起)
std::priority_queue 专门化了 std::swap 算法。交换 lhsrhs 的内容。调用 lhs.swap(rhs).

此重载仅在 std::is_swappable_v<Container>std::is_swappable_v<Compare> 都为 true 时参与重载解析。

(自 C++17 起)

内容

[编辑] 参数

lhs, rhs - 要交换其内容的容器

[编辑] 返回值

(无)

[编辑] 复杂度

与交换底层容器相同。

异常

noexcept 规范:  
noexcept(noexcept(lhs.swap(rhs)))
(自 C++17 起)

说明

虽然为容器适配器引入的 std::swap 重载是在 C++11 中引入的,但容器适配器已经在 C++98 中可以通过 std::swap 交换。此类对 std::swap 的调用通常具有线性时间复杂度,但可能会提供更好的复杂度。

[编辑] 示例

#include <algorithm>
#include <iostream>
#include <queue>
 
int main()
{
    std::priority_queue<int> alice;
    std::priority_queue<int> bob;
 
    auto print = [](const auto& title, const auto& cont)
    {
        std::cout << title << " size=" << cont.size();
        std::cout << " top=" << cont.top() << '\n';
    };
 
    for (int i = 1; i < 4; ++i)
        alice.push(i);
    for (int i = 7; i < 11; ++i)
        bob.push(i);
 
    // Print state before swap
    print("Alice:", alice);
    print("Bobby:", bob);
 
    std::cout << "-- SWAP\n";
    std::swap(alice, bob);
 
    // Print state after swap
    print("Alice:", alice);
    print("Bobby:", bob);
}

输出

Alice: size=3 top=3
Bobby: size=4 top=10
-- SWAP
Alice: size=4 top=10
Bobby: size=3 top=3

[编辑] 参见

(C++11)
交换内容
(公有成员函数) [编辑]