【问题标题】:Sort and keep indices in case of 2dim?在 2dim 的情况下排序并保留索引?
【发布时间】:2014-04-08 18:51:50
【问题描述】:

我在这里有一个矩阵,我想要的是将其元素复制到 2dim 数组或向量的向量中(我更喜欢它),并以保持索引的方式对它们进行排序。

例如对于这个矩阵,我想保留这些数据:(这些数据包含索引并且它们是排序的)

1-5
1-2
2-4
4-5
2-5
1-4
3-5
1-3
3-4
2-3

现在你建议哪一个,我该怎么做?

【问题讨论】:

标签: c++ arrays sorting vector


【解决方案1】:
#include <vector> // for std::vector
#include <algorithm> // for std::sort

// your matrix
int matrix[5][5] = { ... };

// we use a struct to store entries with coordiantes
struct Entry {
    int row, col;
    int value;
};

// copy matrix data to vector    
std::vector<Entry> entries;
for(int i=0; i<5; i++) {
    for(int j=i+1; j<5; j++) {
        entries.push_back({i,j,matrix[i][j]});
    }
}

// sort vector
std::sort(entries.begin(), entries.end(),
    [](const Entry& a, const Entry& b) {
        return a.value> b.value;
    });

【讨论】:

    【解决方案2】:

    我会说使用链表。为每个元素创建一个节点,使每个节点具有以下内容

    node{    
    int data;
    int row;
    int col;
    node *next;
    }
    

    把这个节点中的每一个放在一个数组中,这样你就有了一个节点数组。

    一旦你有了它,你就可以使用每个节点的数据成员对数组进行排序。

    由于节点的行和列部分没有改变,您将能够使用它来保留矩阵中每个元素的位置。

    【讨论】:

    • @Quest 你能多解释一下这个答案我有点困惑一个示例代码可以澄清很多事情,谢谢
    • @IMI - Danvil 实现了我所说的。请看下面的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 2015-01-04
    • 2014-12-27
    • 2021-03-09
    • 2017-07-12
    • 2017-04-28
    • 1970-01-01
    • 2019-08-13
    相关资源
    最近更新 更多