如何使用自定义std :: sort函数?

时间:2012-03-26 02:48:23

标签: c++ sorting vector std

嗨我有一个指针向量,实际上每个指针都是一个数组,每个数组都是:

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函数的次数比必要的多,所以结果不是预期的。

2 个答案:

答案 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]);
    }        
}