如何使用C ++对第一列,第二列,第三列,...列进行排序?

时间:2015-03-15 07:44:07

标签: c++ sorting armadillo

我在C ++中有一个看起来像

的数组
95 52
95 20
95 67
76 25
76 250

我希望按第一列排序,然后排第二列。一般来说,我可能有$ n $列,所以我可能需要一个递归函数。任何人都有快速有效的方法吗?最终目标是获取唯一行的列表。

2 个答案:

答案 0 :(得分:4)

将数据放入向量矢量中,并使用std::sort

vector<vector<int> > vv;
// Put data in the vector...
vector<int> v3 = {95, 67};
vv.push_back(v3);
vector<int> v4 = {76, 25};
vv.push_back(v4);
vector<int> v1 = {95, 52};
vv.push_back(v1);
vector<int> v2 = {95, 20};
vv.push_back(v2);
vector<int> v5 = {76, 250};
vv.push_back(v5);
// Sort the data
sort(vv.begin(), vv.end());

Demo.

std::vector比较是词典,无论其中的项目数量是多少都可以。

答案 1 :(得分:0)

  1. 如果要对数组进行排序,将第1列作为主索引,第2列作为辅助,等等,并获取最终结果。

    自定义排序功能可以完成这项工作。

    struct SortAll {
        bool operator() (int *item1, int *item2) {
            for (int i = 0; i < COLUMN_COUNT; ++i) {
                if (item1[i] < item2[i]) {
                    return true;
                } else if (item1[i] > item2[i]) {
                    return false;
                }
            }
            return false;
        }
    } sort_all;
    
  2. 如果要对数组进行排序,请指定要排序的列,并在每个时间获得一次结果。

    每次要排序时创建一个排序对象。

    struct SortEach {
    public:
        SortEach(int column) : column(column) { }
        bool operator() (int *item1, int *item2) {
            return item1[column] < item2[column];
        }
    private:
        int column;
    }
    
  3. 用法:

    int arr[LENGTH][COLUMN_COUNT];
    SortEach sort_2(2);
    std::sort(&arr[0], &arr[LENGTH], sort_all); // sort by all column
    std::sort(&arr[0], &arr[LENGTH], sort_2); // sort by column 2