So sánh a với x trong c++ năm 2024

Hàm so sánh khi sử dụng hàm sort chính là tham số thứ 3 mà bạn sẽ truyền vào hàm khi sắp xếp mảng, vector.

Hàm này có kiểu trả về là true hoặc false và có 2 tham số với kiểu dữ liệu tương ứng với mảng mà bạn muốn sắp xếp.

Tên của hàm so sánh bạn tự đặt, thông thường mình hay đặt là cmp.

Cú pháp hàm so sánh :

bool cmp(data_type x, data_type y){ }

Logic khi trả về giá trị của hàm so sánh :

  • Nếu muốn x đứng trước y sau khi sắp xếp thì trả về true
  • Nếu muốn x đứng sau y sau khi sắp xếp thì trả về false

x và y ở đây bạn có thể coi như đó là 2 giá trị trong mảng mà bạn cần sắp xếp, khi sắp xếp thì hàm sort cần so sánh giá trị giữa 2 phần tử này. Bạn chỉ cần kiểm tra xem thứ tự của x và y có thỏa mãn x sẽ đứng trước y theo thứ tự sắp xếp của mảng không thì bạn trả về true, ngược lạ trả về false.

Ví dụ như bạn muốn sắp xếp mảng tăng dần, vậy thì x nhỏ hơn y sẽ đứng trước y, khi đó bạn kiểm tra nếu x < y thì bạn trả về true, ngược lại trả về false.

Ví dụ 1 : Sắp xếp mảng giảm dần

include "iostream"

include "algorithm"

using namespace std; bool cmp1(int a, int b){ if(a > b)

return true;  
else
return false;  
} int main(){ int a[] = {1, 3, 3, 3, 2, 1, 2, 4, 2, 4, 0, 2}; int n = 12; sort(a, a + n, cmp1); cout << "Mang giam dan : "; for(int i = 0; i < n; i++){
cout << a[i] << " ";  
} }

Output :

Mang giam dan : 4 4 3 3 3 2 2 2 2 1 1 0

Ví dụ 2 : Sắp xếp mảng theo tổng chữ số tăng dần

include "iostream"

include "algorithm"

using namespace std; int tong(int n){ int ans = 0; while(n){

ans += n % 10;  
n /= 10;  
} return ans; } bool cmp1(int a, int b){ if(tong(a) < tong(b))
return true;  
else return false; } int main(){ int a[] = {1000000, 212, 40, 9, 10001, 30, 449}; int n = 7; sort(a, a + n, cmp1); cout << "Mang sap xep theo tong chu so tang dan : \n"; for(int i = 0; i < n; i++){
cout << a[i] << " ";  
} }

Output :

Mang sap xep theo tong chu so tang dan : 1000000 10001 30 40 212 9 449

Ví dụ 3 : Sắp xếp theo trị tuyệt đối giảm dần

include "iostream"

include "algorithm"

using namespace std; bool cmp(int a, int b){ if(abs(a) > abs(b))

return true;  
else
return false;  
} int main(){ int a[] = {3, -5, -1, 4, -2, 6, -7}; int n = 7; sort(a, a + n, cmp); cout << "Mang sap xep theo tri tuyet doi giam dan : \n"; for(int i = 0; i < n; i++){
cout << a[i] << " ";  
} }

Output :

Mang sap xep theo tri tuyet doi giam dan : -7 6 -5 4 3 -2 -1


2. Sắp xếp mảng với nhiều hơn 2 tiêu chí

Thông thường khi sắp xếp mảng sẽ có những giá trị có cùng thứ tự sắp xếp và khi đó họ sẽ yêu cầu bạn thêm 1 tiêu chí phụ nữa.

Ví dụ sắp xếp danh sách sinh viên theo gpa giảm dần, nếu 2 sinh viên có cùng gpa thì sinh viên nào có tên từ điển nhỏ hơn sẽ đứng trước.

Thậm chí đề bài có thể yêu cầu nhiều hơn 2 tiêu chí, tuy nhiên đối với đề bài yêu cầu kiểu này các bạn chỉ cần xét từ tiêu chí ưu tiên đầu tiên tới tiêu chí ưu tiên cuối cùng là được.