C ++ 2D矢量排序

时间:2016-09-17 00:28:57

标签: c++ sorting vector 2d

我想在2D矢量(10x100)内对数字进行排序。

我的想法是首先按行排序,然后找到第一列中的最小数字并将其保存在新的1D向量中,然后删除列中最小的数字,依此类推直到最后一个数字。 / p>

我的代码是这样的,但它不起作用。

vector <vector <int> > vec(10, vector <int> (0));// already sorted by rows.
vector <int> datafinal;

for( int row=0; row < vec.size(); row++){
    int mini = vec[0][0];
    if (vec[row][0]< mini) {
        datafinal.push_back(mini);
        vec[row].erase(vec[row].begin());
    }
}

for (int k=0; k< datafinal.size(); k++){
    cout << datafinal[k] << endl;
}

1 个答案:

答案 0 :(得分:0)

根据您的问题和逻辑示例,我觉得这就是您要做的事情:

  • 您希望对整个矩阵/ 2d向量进行排序,使得从左到右,从上到下读取m​​artix / 2d向量将按升序/降序读取。

在这种情况下,您可以将整个矩阵/ 2d向量视为一组N个元素进行排序,但您必须确保以2d格式正确放置/替换数据。

这方面的一个例子是:

[3,5,1]
[1,3,1]
[12,4,1]

如果您将其表示为: [3,5,1,1,3,1,12,4,1]

,则可以将其作为标准数组/向量处理

通过将其视为标准数组/向量,您可以在集合上执行常规排序功能。

然后将它转换回矩阵/ 2d格式,你就可以遍历整个集合,每次你读取构成行N大小的元素数量时,你就会转移到新的一行。