gpt4 book ai didi

c++ - 使用 STL 排序时比较方法问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:42:41 25 4
gpt4 key购买 nike

考虑以下代码。它应该按字典顺序对整数 vector 的 vector 进行排序,即首先按第一列,然后按第二列,依此类推。在我的应用程序中,我只关心 8 列中的前 6 列因此在前 6 列的值相等的情况下返回 true。

它导致了问题(段错误)。它为 1000 个数据工作,并为 1001 个数据崩溃。示例代码很简单,但排序是相当复杂程序的一部分。经过长时间的调试,我发现这是麻烦的原因。该程序尝试用一个 (1, 0, ..., 0) 条目对全零数组进行排序。

请任何 C++ 专家告诉我原始(列出的)程序有什么问题?

我在 32 位和 64 位 Linux 上编译它,在 32 位 Windows 上编译它。它总是崩溃。更改评论后,一切似乎都很好。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

const int COLS = 8;

bool compare (const vector<int>& r1, const vector<int>& r2)
{
for (int i = 0; i < COLS-2; i++)
if ( r1[ i ] != r2[ i ] )
return (r1[ i ] < r2[ i ]);
return true; //if true is replace by r1[ COLS-1 ] < r2[ COLS-1 ] then is OK
};

int main(int argc, char **argv)
{
int Na = 20;
vector< vector<int> > v( Na );

for (int r = 0; r < v.size(); r++)
v[r].resize(COLS, 0);
v[0][0] = 1;

cout << "Sorting\n";
sort( v.begin(), v.end(), compare );
cout << "Eof Sorting\n";

return 0;
}

最佳答案

我认为你正在吹牛。排序函数是递归实现的,如果对元素之间的顺序关系给出不一致的答案,算法可能会终止。

关于c++ - 使用 STL 排序时比较方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5438862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com