Toán tử quan hệ
#include <list>
// Với a và b là hai list cùng kiểu:
bool operator==(const list& a, const list& b);
bool operator!=(const list& a, const list& b);
bool operator<(const list& a, const list& b);
bool operator>(const list& a, const list& b);
bool operator<=(const list& a, const list& b);
bool operator>=(const list& a, const list& b);
So sánh hai std::list với nhau.
Tham số
a, b
- Hai std::list cần so sánh. Chúng phải có cùng kiểu phần tử.
Giá trị trả về
Trả về true nếu biểu thức so sánh là đúng, false nếu sai.
Đặc điểm
- So sánh từ điển: Các toán tử quan hệ thực hiện so sánh từ điển, không phải so sánh giá trị tổng của các phần tử.
- Phụ thuộc vào toán tử quan hệ của kiểu phần tử: Việc so sánh các phần tử của std::list sử dụng các toán tử quan hệ tương ứng của kiểu phần tử. Do đó, kiểu phần tử của std::list phải hỗ trợ các toán tử quan hệ.
- Toán tử
!=
: Toán tử!=
trả về kết quả ngược lại với toán tử==
. - Các toán tử khác được định nghĩa dựa trên
<
và==
: Các toán tử>
,<=
,>=
được định nghĩa dựa trên kết quả của<
và==
. - Không làm thay đổi list: Các toán tử này không thay đổi nội dung của 2 list đang được so sánh.
- Độ phức tạp: Độ phức tạp của việc so sánh hai std::list là
O(n)
, với n là số lượng phần tử của std::list ngắn hơn. - Phép so sánh từ điển:
- So sánh từng cặp phần tử: Các toán tử quan hệ sẽ so sánh từng cặp phần tử tương ứng của hai std::list (phần tử đầu tiên của std::list này với phần tử đầu tiên của std::list kia, phần tử thứ hai với phần tử thứ hai, v.v.).
- Kết quả của phép so sánh đầu tiên khác nhau: Ngay khi gặp cặp phần tử đầu tiên khác nhau, kết quả của phép so sánh hai std::list sẽ được quyết định bởi kết quả của phép so sánh hai phần tử đó. Ví dụ, nếu
list1.front() < list2.front()
thì list1 < list2 là true, bất kể các phần tử còn lại. - Chiều dài khác nhau: Nếu một std::list là tiền tố (prefix) của std::list kia (nghĩa là tất cả các phần tử của std::list ngắn hơn đều bằng các phần tử tương ứng của std::list dài hơn), thì std::list ngắn hơn được coi là nhỏ hơn.
- Bằng nhau: Hai std::list được coi là bằng nhau nếu chúng có cùng kích thước và tất cả các phần tử tương ứng đều bằng nhau.
Ví dụ
#include <iostream>
#include <list>
int main() {
std::list<int> list1 = {1, 2, 3};
std::list<int> list2 = {1, 2, 3};
std::list<int> list3 = {1, 2, 4};
std::list<int> list4 = {1, 2};
std::cout << "list1 == list2: " << (list1 == list2) << '\n'; // Output: list1 == list2: 1 (true)
std::cout << "list1 != list3: " << (list1 != list3) << '\n'; // Output: list1 != list3: 1 (true)
std::cout << "list1 < list3: " << (list1 < list3) << '\n'; // Output: list1 < list3: 1 (true)
std::cout << "list4 < list1: " << (list4 < list1) << '\n'; // Output: list4 < list1: 1 (true)
std::cout << "list1 > list4: " << (list1 > list4) << '\n'; // Output: list1 > list4: 1 (true)
std::cout << "list1 >= list2: " << (list1 >= list2) << '\n'; // Output: list1 >= list2: 1 (true)
std::cout << "list1 <= list3: " << (list1 <= list3) << '\n'; // Output: list1 <= list3: 1 (true)
return 0;
}
Các hàm liên quan
swap | Hoán đổi nội dung của hai std::list với nhau |
unique | Xóa các phần tử trùng lặp liên tiếp khỏi std::list |