嗨我有一个指针向量,实际上每个指针都是一个数组,每个数组都是:
int a,int b,可变大小的整数序列。
无序向量的示例:
rows[0] => points to [1,2,...]
rows[1] => points to [2,1,...]
rows[2] => points to [3,1,...]
rows[3] => points to [1,4,...]
rows[4] => points to [1,1,...]
输出示例:
rows[0] => points to [1,1,...]
rows[1] => points to [1,2,...]
rows[2] => points to [1,4,...]
rows[3] => points to [2,1,...]
rows[4] => points to [3,1,...]
我需要以这种方式对此向量进行排序,我创建了以下自定义比较函数:
bool cmpRow(unsigned int *a, unsigned int *b)
{
//Mesmo id word
if(a[0] == b[0])
{
return (a[1] < b[1]);
}
else
{
return (a[0] < b[0]);
}
}
我正以下列方式使用它:
std::vector<unsigned int*> rows;
.
.
//Insert some stuffs
.
.
std::sort (rows.begin(), rows.end(), cmpRow);
但结果不是我所期待的,任何人都可以帮我解决这个问题吗?
修改
实际上函数没问题,问题出现在循环内的函数中,这个函数称为sort函数的次数比必要的多,所以结果不是预期的。
答案 0 :(得分:1)
您的函数cmpRow
根据前两个成员按升序对给定数组进行排序(首先比较第一个成员,如果它们相同则比较第二个成员)。这样可以正常工作并生成您报告的结果,根据该逻辑,这些结果是正确的。如果这不是预期的结果,那么 的结果是什么?
答案 1 :(得分:-1)
像这样更改你的代码?
bool cmpRow(unsigned int *a, unsigned int *b)
{
//You need to safeguard against empty/equal rows
//Mesmo id word
if(a[0] == b[0])
{
return cmpRow(a[1] < b[1]);
}
else
{
return (a[0] < b[0]);
}
}