用boost :: sort替换std :: sort

时间:2014-11-16 22:49:09

标签: c++ sorting boost std preload

我想用boost :: sort替换std :: sort来比较它们之间的性能。一位同事建议我创建一个共享库,重新定义std :: sort,调用boost:sort,然后简单地使用LD_PRELOAD引入新的共享库,因此覆盖std:sort。这会有用吗?如果是这样,有人可以发布一个如何替换stl函数的例子吗?

1 个答案:

答案 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)