Подтвердить что ты не робот

Сортировка списка настраиваемого типа

Я хочу иметь stl list объектов, где каждый объект содержит два int. После этого я хочу отсортировать список с stl:: sort после значения первого int. Как указать функцию сортировки, которую он должен сортировать после первого int?

4b9b3361

Ответ 1

Вы можете указать собственный предикат сортировки. В С++ 11 это лучше всего сделать с помощью лямбда:

typedef std::pair<int, int> ipair;
std::list<ipair> thelist;

thelist.sort([](const ipair & a, const ipair & b) { return a.first < b.first; });

В более старых версиях С++ вам нужно написать соответствующую функцию:

bool compFirst(const ipair & a, const ipair & b) { return a.first < b.first; }

thelist.sort(compFirst);

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

Наконец, если это имеет смысл, вы также можете оснастить свой собственный класс operator<. Это позволяет свободно использовать класс в любом упорядоченном контексте, но не забудьте понять последствия этого.

Ответ 3

Вы можете сделать что-то вроде этого:

typedef std::pair<int,int>;
list<my_type> test_list;

bool my_compare (my_type a, my_type b)
{
    return a.first < b.first;
}

test_list.sort(my_compare);

Если тип был структурой или классом, он работал бы примерно так:

struct some_struct{
    int first;
    int second;
};

list<some_struct>  test_list;

bool my_compare (const some_struct& a,const some_struct& b)
{
    return a.first < b.first;
}

test_list.sort(my_compare);

Или вы можете определить operator < для своей структуры и просто вызвать test_list.sort()