Я хотел бы заменить std :: sort на boost :: sort, чтобы сравнить производительность между ними. Коллега порекомендовал мне создать разделяемую библиотеку с переопределением std :: sort, которая вызывает boost: sort, а затем просто использовать LD_PRELOAD, чтобы ввести новую разделяемую библиотеку, и, следовательно, переопределить std: sort. Будет ли это работать? Если это так, может кто-нибудь опубликовать пример того, как заменить функцию STL?
Подтвердить Нил Кирк претензии, мы можем взглянуть на boost/range/algorithm/sort.hpp
заголовок. А также range::sort
на самом деле реализуется с точки зрения std::sort
,
template<class RandomAccessRange>
inline RandomAccessRange& sort(RandomAccessRange& rng)
{
BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
std::sort(boost::begin(rng), boost::end(rng));
return rng;
}
/// \overload
template<class RandomAccessRange>
inline const RandomAccessRange& sort(const RandomAccessRange& rng)
{
BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
std::sort(boost::begin(rng), boost::end(rng));
return rng;
}
/// \overload
template<class RandomAccessRange, class BinaryPredicate>
inline RandomAccessRange& sort(RandomAccessRange& rng, BinaryPredicate pred)
{
BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<RandomAccessRange> ));
std::sort(boost::begin(rng), boost::end(rng), pred);
return rng;
}
/// \overload
template<class RandomAccessRange, class BinaryPredicate>
inline const RandomAccessRange& sort(const RandomAccessRange& rng, BinaryPredicate pred)
{
BOOST_RANGE_CONCEPT_ASSERT(( RandomAccessRangeConcept<const RandomAccessRange> ));
std::sort(boost::begin(rng), boost::end(rng), pred);
return rng;
}
Так что нет смысла делать это. Страница для range::sort
также перечисляет сложность, которая отражает сложность для std::sort
:
Источник: повышение
O (N log (N)) сравнений (как среднего, так и наихудшего случая), где N
Расстояние (RNG).
Источник: cppreference
O (N · log (N)), где N = std :: distance (first, last) сравнений на
средний. (до C ++ 11)O (N · log (N)), где N = std :: расстояние (первое, последнее) сравнения. (поскольку
С ++ 11)