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

Toán tử quan hệ

#include <unordered_set>

// Với a và b là hai unordered_multiset cùng kiểu:
template <class Key, class Hash, class Pred, class Alloc>
bool operator==(const unordered_multiset<Key, Hash, Pred, Alloc>& a,
const unordered_multiset<Key, Hash, Pred, Alloc>& b);

template <class Key, class Hash, class Pred, class Alloc>
bool operator!=(const unordered_multiset<Key, Hash, Pred, Alloc>& a,
const unordered_multiset<Key, Hash, Pred, Alloc>& b);

So sánh hai std::unordered_multiset với nhau.

Tham số

a, b

  • Hai std::unordered_multiset cần so sánh. Chúng phải có cùng kiểu tham số.

Giá trị trả về

bool

  • Trả về true nếu biểu thức so sánh là đúng, false nếu sai.

Đặc điểm

  1. So sánh nội dung, không so sánh thứ tự: Các toán tử quan hệ so sánh nội dung của hai std::unordered_multiset (số lượng và giá trị các phần tử), không quan tâm đến thứ tự cụ thể của các phần tử bên trong (vì std::unordered_multiset không lưu trữ phần tử theo thứ tự).
  2. Phụ thuộc vào toán tử == của kiểu phần tử: Việc so sánh các phần tử của std::unordered_multiset sử dụng toán tử == của kiểu phần tử. Do đó, kiểu phần tử của std::unordered_multiset phải hỗ trợ toán tử ==.
  3. Phụ thuộc vào key_eq(): Việc xác định hai phần tử có bằng nhau hay không còn phụ thuộc vào hàm key_eq() (equality comparison function) của std::unordered_multiset.
  4. Chỉ hỗ trợ ==!=: std::unordered_multiset chỉ hỗ trợ toán tử ==!=, không hỗ trợ các toán tử so sánh thứ tự <, >, <=, >= vì các phần tử không được sắp xếp.
  5. Không làm thay đổi set: Các toán tử này là const, không làm thay đổi nội dung của 2 set đang được so sánh.
  6. Độ phức tạp:
    • Trường hợp tốt nhất (hai set khác kích thước): O(1).
    • Trường hợp trung bình: O(n), với n là số phần tử trong set.
    • Trường hợp xấu nhất: O(n²).

Ví dụ

#include <iostream>
#include <unordered_set>

int main() {
std::unordered_multiset<int> umset1 = {1, 2, 3, 3};
std::unordered_multiset<int> umset2 = {3, 2, 1, 3};
std::unordered_multiset<int> umset3 = {1, 2, 4};
std::unordered_multiset<int> umset4 = {1, 2, 3, 3, 3};

std::cout << "umset1 == umset2: " << (umset1 == umset2) << '\n'; // Output: umset1 == umset2: 1 (true) - cùng phần tử, số lần xuất hiện giống nhau, không quan trọng thứ tự
std::cout << "umset1 != umset3: " << (umset1 != umset3) << '\n'; // Output: umset1 != umset3: 1 (true) - phần tử khác nhau
std::cout << "umset1 == umset4: " << (umset1 == umset4) << '\n'; // Output: umset1 == umset4: 0 (false) - kích thước khác nhau
std::cout << "umset1 != umset4: " << (umset1 != umset4) << '\n'; // Output: umset1 != umset4: 1 (true) - kích thước khác nhau

return 0;
}

Các hàm liên quan

equal_rangeTrả về một cặp iterator xác định phạm vi các phần tử trong std::unordered_multiset có giá trị bằng với giá trị key cho trước
=Gán nội dung của một std::unordered_multiset khác hoặc một initializer_list cho std::unordered_multiset hiện tại