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