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

std::unordered_multimap::swap

#include <unordered_map>

void swap(unordered_multimap& other);

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

Tham số

other

  • Tham chiếu đến std::unordered_multimap khác mà bạn muốn hoán đổi nội dung. other phải là một std::unordered_multimap có cùng kiểu tham số với std::unordered_multimap 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::unordered_multimap, bao gồm tất cả các phần tử, kích thước, bảng băm, hàm băm, hàm so sánh bằng và bộ cấp phát của chúng.
  2. noexcept: Trong hầu hết các trường hợp, swap() được đánh dấu là noexcept, nghĩa là nó được đảm bảo không ném ra ngoại lệ nào (trừ khi bạn sử dụng bộ cấp phát tùy chỉnh có thể ném ngoại lệ, nhưng trường hợp này rất hiếm gặp).
  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::unordered_multimap này sẽ trỏ đến các phần tử của std::unordered_multimap kia.
  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><unordered_map>) có thể được sử dụng để hoán đổi hai std::unordered_multimap. 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ố. Việc hoán đổi được thực hiện bằng cách trao đổi các con trỏ quản lý dữ liệu bên trong của hai std::unordered_multimap, thay vì sao chép từng phần tử.

Ví dụ

#include <iostream>
#include <unordered_map>

int main() {
std::unordered_multimap<std::string, int> ummap1 = {{"apple", 1}, {"banana", 2}, {"apple", 3}};
std::unordered_multimap<std::string, int> ummap2 = {{"grape", 4}, {"kiwi", 5}, {"orange", 6}, {"grape", 7}};

std::cout << "ummap1 before swap:\n";
for (const auto& pair : ummap1) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// Output:
// ummap1 before swap:
// apple: 1
// apple: 3
// banana: 2
// (thứ tự có thể khác)

std::cout << "ummap2 before swap:\n";
for (const auto& pair : ummap2) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// Output:
// ummap2 before swap:
// grape: 4
// kiwi: 5
// orange: 6
// grape: 7
// (thứ tự có thể khác)

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

std::cout << "ummap1 after swap:\n";
for (const auto& pair : ummap1) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// Output:
// ummap1 after swap:
// grape: 4
// kiwi: 5
// orange: 6
// grape: 7
// (thứ tự có thể khác)

std::cout << "ummap2 after swap:\n";
for (const auto& pair : ummap2) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// Output:
// ummap2 after swap:
// apple: 1
// apple: 3
// banana: 2
// (thứ tự có thể khác)

return 0;
}