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

std::map::swap

#include <map>

void swap(map& other);

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

Tham số

other

  • Tham chiếu đến std::map khác mà bạn muốn hoán đổi nội dung. other phải là một std::map có cùng kiểu tham số với std::map 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::map, bao gồm tất cả các phần tử, kích thước, hàm so sánh và bộ cấp phát của chúng.
  2. noexcept: Kể từ C++17, nếu 2 map có cùng allocator thì 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ước C++17, hoặc khi 2 map có allocator khác nhau, nó có thể ném ngoại lệ.
  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::map này sẽ trỏ đến các phần tử của std::map 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><map>) có thể được sử dụng để hoán đổi hai std::map. 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() đượ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::map, thay vì sao chép từng phần tử.

Ví dụ

#include <iostream>
#include <map>

int main() {
std::map<std::string, int> map1 = {{"apple", 1}, {"banana", 2}};
std::map<std::string, int> map2 = {{"grape", 3}, {"kiwi", 4}, {"orange", 5}};

std::cout << "map1 before swap:\n";
for (const auto& pair : map1) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// Output:
// map1 before swap:
// apple: 1
// banana: 2

std::cout << "map2 before swap:\n";
for (const auto& pair : map2) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// Output:
// map2 before swap:
// grape: 3
// kiwi: 4
// orange: 5

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

std::cout << "map1 after swap:\n";
for (const auto& pair : map1) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// Output:
// map1 after swap:
// grape: 3
// kiwi: 4
// orange: 5

std::cout << "map2 after swap:\n";
for (const auto& pair : map2) {
std::cout << pair.first << ": " << pair.second << '\n';
}
// Output:
// map2 after swap:
// apple: 1
// banana: 2

return 0;
}