Có sáu toán tử quan hệ để so sánh toán hạng cùng kiểu: >, <, ==, <=, >=, !=. Bài viết giải thích các toán tử này trên mảng STL array trong C++. Hai toán tử chính dùng là so sánh bằng (==) và nhỏ hơn (<) giữa hai container array.
So sánh bằng (==) bắt đầu so sánh phần tử của cả hai mảng từ đầu. Bắt đầu từ phần tử đầu tiên hai bên của ==, so sánh dừng tại sự không khớp đầu tiên.
So sánh nhỏ hơn (<) hoạt động theo thứ tự từ điển (lexicographic). Thuật toán giống std::lexicographic_compare. So sánh tuần tự dùng operator(<) theo cách đối xứng (kiểm tra a<b và b<a). Thứ tự từ điển dùng trong từ điển để sắp xếp từ theo chữ cái từ chữ cái đầu đến cuối. Các toán tử khác dùng == và < như sau:
- a != b tương đương !(a == b)
- a > b tương đương (b < a)
- a <= b tương đương !(b < a)
- a >= b tương đương !(a < b)
Các toán tử này được nạp chồng trong header <array>.
Lưu ý: Cả hai mảng STL ở hai vế phải có cùng tham số <Kiểu, Độ dài>.
Độ phức tạp thời gian của so sánh là thời gian tuyến tính, phụ thuộc kích thước mảng. O(n)
Giá trị trả về là true nếu điều kiện đúng, ngược lại false.
Ví dụ
#include <iostream>
#include <stdio.h>
#include <array>
using namespace std;
int main() {
// khai báo mảng
array<int, 5> marks1 = { 10, 20, 30, 40, 50 };
array<int, 5> marks2 = { 100, 200, 300, 400, 500 };
array<int, 5> marks3 = { 10, 20, 30, 40, 50 };
// a>=b tương đương !(a<b)
if (marks1 >= marks2) {
cout << "Marks1 lớn hơn hoặc bằng Marks2\n";
} else {
cout << "Marks1 không lớn hơn cũng không bằng Marks2\n";
}
if (!(marks1 < marks2)) {
cout << "Marks1 lớn hơn hoặc bằng Marks2\n";
} else {
cout << "Marks1 không lớn hơn cũng không bằng Marks2\n";
}
// a<=b tương đương !(a>b)
if (marks1 <= marks2) {
cout << "Marks1 nhỏ hơn hoặc bằng Marks2\n";
} else {
cout << "Marks1 không nhỏ hơn cũng không bằng Marks2\n";
}
if (!(marks1 > marks2)) {
cout << "Marks1 nhỏ hơn hoặc bằng Marks2\n";
} else {
cout << "Marks1 không nhỏ hơn cũng không bằng Marks2\n";
}
// a!=b tương đương !(a==b)
if (marks1 != marks3) {
cout << "Marks1 không bằng Marks2\n";
} else {
cout << "Marks1 bằng Marks2\n";
}
if (!(marks1 == marks3)) {
cout << "Marks1 không bằng Marks2\n";
} else {
cout << "Marks1 bằng Marks2\n";
}
return 0;
}
Đầu ra
Marks1 không lớn hơn cũng không bằng Marks2 Marks1 không lớn hơn cũng không bằng Marks2 Marks1 nhỏ hơn hoặc bằng Marks2 Marks1 nhỏ hơn hoặc bằng Marks2 Marks1 bằng Marks2 Marks1 bằng Marks2