Toán tử quan hệ
#include <queue>
// Với a và b là hai queue cùng kiểu và cùng underlying container:
template <class T, class Container>
bool operator==(const queue<T, Container>& a, const queue<T, Container>& b);
template <class T, class Container>
bool operator!=(const queue<T, Container>& a, const queue<T, Container>& b);
template <class T, class Container>
bool operator<(const queue<T, Container>& a, const queue<T, Container>& b);
template <class T, class Container>
bool operator>(const queue<T, Container>& a, const queue<T, Container>& b);
template <class T, class Container>
bool operator<=(const queue<T, Container>& a, const queue<T, Container>& b);
template <class T, class Container>
bool operator>=(const queue<T, Container>& a, const queue<T, Container>& b);
So sánh hai std::queue với nhau.
Tham số
a, b
- Hai std::queue cần so sánh. Chúng phải có cùng kiểu phần tử và cùng kiểu underlying container.
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ử và container: Việc so sánh các phần tử của std::queue sử dụng các toán tử quan hệ tương ứng của kiểu phần tử, và việc so sánh dựa trên so sánh các underlying container. Do đó, kiểu phần tử của std::queue phải hỗ trợ các toán tử quan hệ và underlying container cũng cần phải hỗ trợ.
- 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 queue: Các toán tử này không thay đổi nội dung của 2 queue đang được so sánh.
- Độ phức tạp: Độ phức tạp của việc so sánh hai std::queue là
O(n)
, với n là số lượng phần tử của std::queue ngắn hơn.
Giải thích chi tiết về 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::queue, bắt đầu từ phần tử ở đầu queue.
- 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::queue 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
queue1.front() < queue2.front()
thì queue1 < queue2 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::queue là tiền tố (prefix) của std::queue kia (nghĩa là tất cả các phần tử của std::queue ngắn hơn đều bằng các phần tử tương ứng của std::queue dài hơn), thì std::queue ngắn hơn được coi là nhỏ hơn.
- Bằng nhau: Hai std::queue đượ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 <queue>
int main() {
std::queue<int> queue1;
queue1.push(1);
queue1.push(2);
queue1.push(3);
std::queue<int> queue2;
queue2.push(1);
queue2.push(2);
queue2.push(3);
std::queue<int> queue3;
queue3.push(1);
queue3.push(2);
queue3.push(4);
std::queue<int> queue4;
queue4.push(1);
queue4.push(2);
std::cout << "queue1 == queue2: " << (queue1 == queue2) << '\n'; // Output: queue1 == queue2: 1 (true)
std::cout << "queue1 != queue3: " << (queue1 != queue3) << '\n'; // Output: queue1 != queue3: 1 (true)
std::cout << "queue1 < queue3: " << (queue1 < queue3) << '\n'; // Output: queue1 < queue3: 1 (true)
std::cout << "queue4 < queue1: " << (queue4 < queue1) << '\n'; // Output: queue4 < queue1: 1 (true)
std::cout << "queue1 > queue4: " << (queue1 > queue4) << '\n'; // Output: queue1 > queue4: 1 (true)
std::cout << "queue1 >= queue2: " << (queue1 >= queue2) << '\n'; // Output: queue1 >= queue2: 1 (true)
std::cout << "queue1 <= queue3: " << (queue1 <= queue3) << '\n'; // Output: queue1 <= queue3: 1 (true)
return 0;
}
Các hàm liên quan
swap | Hoán đổi nội dung của hai std::queue với nhau |