Сортировка с компаратором через std::function вдвое медленнее
void sortTrades(std::vector<Trade>& v, std::function<bool(const Trade&, const Trade&)> less) {
std::sort(v.begin(), v.end(), less);
}
sortTrades(trades, [](const Trade& a, const Trade& b) { return a.ts < b.ts; });
Та же сортировка с лямбдой, переданной прямо в std::sort, на 10 млн сделок работает примерно вдвое быстрее. Сборка -O2. Откуда разница?
- std::function стирает тип и мешает встраиванию
- std::function копирует элементы при сравнении
- std::sort с std::function выбирает другой алгоритм
- Лямбда в std::function вызывается через new
