c++二维矢量排序

C++ 2D vector sorting

本文关键字:排序 二维 c++      更新时间:2023-10-16

我想对2D向量(10x100)中的数字进行排序。

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

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

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;
}

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

  • 您希望对整个矩阵/2d矢量进行排序,以便从左到右,从上到下读取矩阵/2d矢量将按升序/降序读取。

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

这样的一个例子是:

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

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

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

通过将其视为标准数组/向量,可以对该集合执行普通排序函数。

然后将其转换回矩阵/2d格式,您可以遍历该集合,每次您读取构成行N大小的元素数量时,您将移动到新行