Как использовать пользовательскую функцию std :: sort? - PullRequest
0 голосов
/ 26 марта 2012

Привет, у меня есть вектор указателей, фактически каждый указатель является массивом, где каждый массив имеет вид:

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

Но результат не был ожидаемым, может кто-нибудь помочь мне с этой проблемой?

Редактировать:

На самом деле с функциями все в порядке, проблема была в функции внутри цикла, эта функция вызывала функцию сортировки чаще, чем необходимо, поэтому результат не быложидается.

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Ваша функция cmpRow сортирует заданные массивы в порядке возрастания на основе первых двух элементов (сначала сравнивая первые элементы, а если они совпадают, то сравнивая вторые элементы).Это работает нормально и дает результаты, о которых вы сообщили, которые являются правильными в соответствии с этой логикой.Если это не был ожидаемый результат, какой результат действительно вы ожидаете?

0 голосов
/ 26 марта 2012

Изменить свой код, как это?

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]);
    }        
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...