Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何对c+中的向量组元素进行排序+;?_C++_Sorting_Vector - Fatal编程技术网

C++ 如何对c+中的向量组元素进行排序+;?

C++ 如何对c+中的向量组元素进行排序+;?,c++,sorting,vector,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 < /COD>和C++ 排序< /COD>函数,作为该窗体,但失败了。 当我尝试使

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

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

[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 < /COD>和C++ <代码>排序< /COD>函数,作为该窗体,但失败了。

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

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

我的矩阵是用
vector

//将矩阵按行排序
对于(int i=0;i

如何解决此问题?

您应该为超出范围的访问添加防护。您看到的错误很可能是由
矩阵[i][i+1]
引起的,因为i+1超出了
矩阵[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;
    }
}
//将矩阵按行排序
对于(int i=0;i+1<矩阵[i]。size()&&i<节点;i++){
排序(矩阵[i].begin()+1+i,矩阵[i].end());
if(矩阵[i][i+1]<最小值){
极小值=矩阵[i][i+1];
行=i;
}
}

这可能与此问题相同吗@克里斯蒂安·哈克尔:不。我想从I位置到end对向量排序什么是
inf
?你说的“失败”是什么意思?它到底在哪里失败?正如我看到的,您的代码生成了预期的结果创建一个。并描述程序是如何“失败”的。这明智地忽略了最后一行,其中OP对空序列进行排序。我假设numnodes==matrix.size()==matrix[I].size(),因此循环条件可以简化为
I+1
我只是尝试了一下,但继续使用6elements@Caleth这也是我的假设,但由于缺乏背景,我决定玩它safe@AlmuHS您能否提供我们能够重现问题的最小示例。我敢肯定,您给usNow的代码中没有问题,它也有10个元素失败
//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;
    }
}`
//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;
    }
}