Chuyển tới nội dung chính

std::priority_queue::swap

#include <queue>

void swap(priority_queue& other);

Hoán đổi nội dung của hai std::priority_queue với nhau.

Tham số

other

  • Tham chiếu đến std::priority_queue khác mà bạn muốn hoán đổi nội dung. other phải là một std::priority_queue có cùng kiểu phần tử, cùng kiểu container underlying và cùng kiểu hàm so sánh với std::priority_queue hiện tại.

Giá trị trả về

Không có giá trị trả về

Đặc điểm

  1. Hoán đổi nội dung: swap() hoán đổi toàn bộ nội dung của hai std::priority_queue, bao gồm tất cả các phần tử, kích thước và các thiết lập khác (container underlying, hàm so sánh) của chúng.
  2. noexcept: swap() được đánh dấu là noexcept (kể từ C++11), nghĩa là nó được đảm bảo không ném ra ngoại lệ nào.
  3. An toàn: Sau khi gọi swap(), các iterator, tham chiếu, và con trỏ ban đầu trỏ đến các phần tử của std::priority_queue này sẽ trỏ đến các phần tử của std::priority_queue kia (nếu underlying container của chúng hỗ trợ).
  4. Phiên bản non-member std::swap: Ngoài hàm thành viên swap(), C++ còn cung cấp phiên bản non-member std::swap (trong <algorithm><queue>) có thể được sử dụng để hoán đổi hai std::priority_queue. Phiên bản non-member thường được ưu tiên hơn vì nó khái quát hơn và có thể hoạt động với nhiều kiểu dữ liệu khác.
  5. Hiệu quả: swap() thường được thực hiện với độ phức tạp O(1) - thời gian hằng số, vì nó thường chỉ hoán đổi con trỏ của underlying container.

Ví dụ

#include <iostream>
#include <queue>

int main() {
std::priority_queue<int> pq1;
pq1.push(10);
pq1.push(30);
pq1.push(20);

std::priority_queue<int> pq2;
pq2.push(50);
pq2.push(40);
pq2.push(60);

std::cout << "pq1 before swap:";
for (std::priority_queue<int> temp = pq1; !temp.empty(); temp.pop()) {
std::cout << ' ' << temp.top();
}
std::cout << '\n'; // Output: pq1 before swap: 30 20 10

std::cout << "pq2 before swap:";
for (std::priority_queue<int> temp = pq2; !temp.empty(); temp.pop()) {
std::cout << ' ' << temp.top();
}
std::cout << '\n'; // Output: pq2 before swap: 60 50 40

pq1.swap(pq2); // Hoán đổi nội dung của pq1 và pq2

std::cout << "pq1 after swap:";
for (std::priority_queue<int> temp = pq1; !temp.empty(); temp.pop()) {
std::cout << ' ' << temp.top();
}
std::cout << '\n'; // Output: pq1 after swap: 60 50 40

std::cout << "pq2 after swap:";
for (std::priority_queue<int> temp = pq2; !temp.empty(); temp.pop()) {
std::cout << ' ' << temp.top();
}
std::cout << '\n'; // Output: pq2 after swap: 30 20 10

return 0;
}