我想用boost :: sort替换std :: sort来比较它们之间的性能。一位同事建议我创建一个共享库,重新定义std :: sort,调用boost:sort,然后简单地使用LD_PRELOAD引入新的共享库,因此覆盖std:sort。这会有用吗?如果是这样,有人可以发布一个如何替换stl函数的例子吗?
答案 0 :(得分:4)
为了证实Neil Kirk's声明,我们可以查看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 :: distance(第一个,最后一个)比较。 (以来 C ++ 11)