Я хочу иметь stl list
объектов, где каждый объект содержит два int
.
После этого я хочу отсортировать список с stl:: sort после значения первого int
.
Как указать функцию сортировки, которую он должен сортировать после первого int
?
Сортировка списка настраиваемого типа
Ответ 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<
. Это позволяет свободно использовать класс в любом упорядоченном контексте, но не забудьте понять последствия этого.
Ответ 2
std:: list:: sort имеет форму с одним аргументом, причем первым аргументом является функция сравнения.
Ответ 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()