std::multiset::swap
#include <set>
void swap(multiset& other);
Hoán đổi nội dung của hai std::multiset với nhau.
Tham số
other
- Tham chiếu đến std::multiset khác mà bạn muốn hoán đổi nội dung.
other
phải là một std::multiset có cùng kiểu tham số với std::multiset hiện tại.
Giá trị trả về
Không có giá trị trả về
Đặc điểm
- Hoán đổi nội dung:
swap()
hoán đổi toàn bộ nội dung của hai std::multiset, 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. - 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). - 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::multiset này sẽ trỏ đến các phần tử của std::multiset kia. - 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>
và<set>
) có thể được sử dụng để hoán đổi hai std::multiset. 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. - Hiệu quả:
swap()
được thực hiện với độ phức tạpO(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::multiset, thay vì sao chép từng phần tử.
Ví dụ
#include <iostream>
#include <set>
int main() {
std::multiset<int> mset1 = {1, 2, 3, 2};
std::multiset<int> mset2 = {4, 5, 6, 7, 4};
std::cout << "mset1 before swap:";
for (int x : mset1) std::cout << ' ' << x;
std::cout << '\n'; // Output: mset1 before swap: 1 2 2 3
std::cout << "mset2 before swap:";
for (int x : mset2) std::cout << ' ' << x;
std::cout << '\n'; // Output: mset2 before swap: 4 4 5 6 7
mset1.swap(mset2); // Hoán đổi nội dung của mset1 và mset2
std::cout << "mset1 after swap:";
for (int x : mset1) std::cout << ' ' << x;
std::cout << '\n'; // Output: mset1 after swap: 4 4 5 6 7
std::cout << "mset2 after swap:";
for (int x : mset2) std::cout << ' ' << x;
std::cout << '\n'; // Output: mset2 after swap: 1 2 2 3
return 0;
}