如何在c ++中对矢量组元素进行排序?

时间:2017-01-12 09:42:11

标签: c++ sorting vector

我试图在邻接矩阵中搜索最小元素。 为了得到这个,我想逐行排序元素。

为了优化排序,我只想对此向量的重要元素进行排序,如下所示:

[0,   5,   9,   7]
[inf, 0,   6,   3]
[inf, inf, 0,  12]
[inf, inf, inf, 0]

排序的矩阵必须是:

[0,   5,   7,   9]
[inf, 0,   3,   6]
[inf, inf, 0,  12]
[inf, inf, inf, 0]

我尝试使用std::vector<int>和C ++ sort函数作为此表单,但它失败了。

当我尝试使用6个元素执行时,程序会显示错误:

 
malloc(): memory corruption (fast): 0x000000000cb12490

对于其他数量,有时会产生类似的错误或返回-1

我的矩阵是用vector<vector<int> >

实现的
//Sort matrix row to row
for(int i = 0; i < numnodes; i++){
    sort(matrix[i].begin()+1+i, matrix[i].end());
    if(matrix[i][i+1] < minimal){
        minimal = matrix[i][i+1];
        row = i;
    }
}`

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您应该为超出范围访问添加警卫。很可能你看到的错误是由matrix[i][i+1]引起的,当i + 1超出matrix[i]的界限时。我相信这应该是代码的固定版本。

//Sort matrix row to row
for(int i = 0; i + 1 < matrix[i].size() && i < numnodes; i++){
    sort(matrix[i].begin()+1+i, matrix[i].end());
    if(matrix[i][i+1] < minimal){
        minimal = matrix[i][i+1];
        row = i;
    }
}