list::sort
и std::sort
для векторов не используют один и тот же алгоритм.
std::sort
использует алгоритм сортировки, который требует итераторов с произвольным доступом, таких как те, которые требуются для std::vector
,но не std::list
.
list::sort
специализируется для списков;он обычно реализует сортировку слиянием, которая не требует произвольного доступа.
Общее количество сравнений составляет O (n log n) для обоих алгоритмов (я говорю, что, не зная точного алгоритма, используемого моим компилятором * 1013)* реализация).Общее число перестановок также равно O (n log n), но для std::sort
это означает O (n log n) вызовов для копирования оператора конструктора / присваивания, тогда как для list::sort
это операция указателя.Ваша структура слишком мала, чтобы воспользоваться этим преимуществом.Я предполагаю, что как только вы поместите что-то с нетривиальным конструктором копирования в структуру (возможно, достаточно std::string
), std::list
победит.
РЕДАКТИРОВАТЬ: один элемент std :: string инициализировансо случайным двойным преобразованием в текст, похоже, это точка безубыточности на моем компьютере (x86_64-linux, gcc 4.6.2)