Для сортировки нужно чтобы обьекты можно было сранивать, т.е. что бы был определен operator< для элементов списка.
Можно использовать алгоритм sort, но у списка есть метод sort, который работает более эффективно, чем общий алгоритм.
Тоесть чтобы отсортировать std::list<A*> spisok;
достаточно определить bool operator<(A* lhs, A* rhs);
и просто вызвать spisok.sort();
Но нам нужно сортировать по разным критериям, тогда воспользеумся методом sort с параметром, ему можно передать функцию, которая будет использоваться вместо operator<.
Напишем функции сравнения
bool SortByA(A* lhs, A* rhs)
{
return lhs->a < rhs->a;
}
bool SortByB(A* lhs, A* rhs)
{
return lhs->b < rhs->b;
}
bool SortByC(A* lhs, A* rhs)
{
return lhs->c < rhs->c;
}
и отсортируем список
и напоследок лирическое отступление
не стоит в контейнерах хранить встроенные указатели
используй обертки, но не std:auto_ptr