我需要使用C或C++对多列上的双精度数组进行排序。有人能指点我应该使用的算法还是现有的库(可能是boost?),它具有这种功能?在多列上排序2维数组
我有一种感觉,写一个递归函数可能是要走的路,但我懒得写出算法或自己实现它,如果它已在别处完成。 :-)
由于
我需要使用C或C++对多列上的双精度数组进行排序。有人能指点我应该使用的算法还是现有的库(可能是boost?),它具有这种功能?在多列上排序2维数组
我有一种感觉,写一个递归函数可能是要走的路,但我懒得写出算法或自己实现它,如果它已在别处完成。 :-)
由于
可以使用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);
// ...
这应该工作。我知道qsort和std :: sort,但从来没有想过将比较函数扩展到多于1列。 我会执行它,并会接受你的答案,如果它适合我。感谢您的快速回复。 – vad 2010-06-15 01:02:32
您也可以使用std :: stable_sort - 只需从_least_ significant列开始重复排序数组。 – 2010-06-15 16:02:41
这一个是完美的答案..!谢谢@michael aaron safyan – 2013-01-02 05:33:20
我用下面的代码:
// 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);
你只排序上一个可以列在同一时间。然而,如果排序列中的两个元素相等,则可以回退到另一个辅助列......顺便说一句,“我太懒了”这个词从未遇到过。 – Warty 2010-06-15 00:53:11
那么我已经做了一些公平的编码,我知道没有现有的代码(例如,用于扩展现有技术状态的各种统计模型的MCMC采样器)。我更喜欢懒惰,而不是重新发明轮子,尤其是在一个地区,我相信这里应该有一些东西。 – vad 2010-06-15 01:00:36
1)什么顺序?对每个柱子分别进行排序?按行排序?沿着柱子? 2)小尺寸是固定的还是指针数组? – adf88 2010-06-15 04:37:33