我需要使用C或C ++对多列的二维二进制数组进行排序。有人能指出我应该使用的算法还是具有此功能的现有库(可能是boost?)?
我有一种感觉,写一个递归函数可能是要走的路但我懒得写出算法或者自己实现它,如果已经在其他地方完成的话。 : - )
由于
答案 0 :(得分:9)
您可以使用std::sort
(C ++)或qsort
(C或C ++)来执行排序操作。棘手的部分是您需要定义自定义比较函数来比较您的行。例如:
bool compareTwoRows(double* rowA, double* rowB){
return ( (rowA[0]<rowB[0]) || ((rowA[0]==rowB[0])&&(rowA[1]<rowB[1])) );
}
// ...
double** two_dimensional_array = // ...
int rows = // ... number of rows ...
std::sort(two_dimensional_array,two_dimensional_array+rows,&compareTwoRows);
// ...
答案 1 :(得分:0)
我使用了以下代码:
// Order function. Change the 2 for the column number you want to use
bool compareRowsByColumn(vector<double> rowA, vector<double> rowB){
return (rowA[2] < rowB[2]);
}
// The sorting line. Matrix is the two dimensional vector.
sort(matrix.begin(), matrix.end(), &compareRowsByColumn);