在C++中,qsort
是一個通用的排序函數,它要求你提供一個比較函數來確定元素之間的順序。對于對象排序,你需要定義一個比較函數,該函數接受兩個參數(通常是指向對象的指針),并返回一個整數,表示這兩個對象之間的關系(例如,小于、等于或大于)。
以下是一個使用qsort
對對象進行排序的示例:
#include <iostream>
#include <algorithm>
class MyClass {
public:
int value;
MyClass(int v) : value(v) {}
};
// 自定義比較函數
int compare(const void *a, const void *b) {
MyClass *obj1 = static_cast<MyClass *>(a);
MyClass *obj2 = static_cast<MyClass *>(b);
if (obj1->value < obj2->value) {
return -1;
} else if (obj1->value > obj2->value) {
return 1;
} else {
return 0;
}
}
int main() {
MyClass arr[] = {MyClass(3), MyClass(1), MyClass(2)};
int n = sizeof(arr) / sizeof(arr[0]);
// 使用qsort對數組進行排序
qsort(arr, n, sizeof(MyClass), compare);
// 輸出排序后的數組
for (int i = 0; i < n; ++i) {
std::cout << arr[i].value << " ";
}
return 0;
}
在這個示例中,我們定義了一個名為MyClass
的類,其中包含一個名為value
的成員變量。我們還定義了一個名為compare
的自定義比較函數,該函數根據MyClass
對象的value
成員變量對它們進行比較。
在main
函數中,我們創建了一個MyClass
類型的數組,并使用qsort
對其進行排序。我們將數組、數組長度、每個元素的大小(使用sizeof
操作符計算)以及自定義比較函數作為參數傳遞給qsort
。最后,我們遍歷并輸出排序后的數組。