2014-11-16 1 views
1

std :: sort를 boost :: sort로 대체하여 성능을 비교하고 싶습니다. 동료는 boost : sort를 호출하는 std :: sort의 재정의를 사용하여 공유 라이브러리를 만든 다음 LD_PRELOAD를 사용하여 새 공유 라이브러리를 가져 와서 std : sort를 재정의 할 것을 권장했습니다. 이게 효과가 있니? 그렇다면 누군가 stl 함수를 대체하는 방법의 예를 게시 할 수 있습니까?std :: sort를 boost :: sort로 대체하십시오.

+5

나는 그것을 권장합니다 - std :: sort of boost :: sort를 테스트하기 위해 가지고있는'sort' 함수에 할당하고 그 함수를 호출하면 안됩니다 ? –

+0

원칙적으로 테스트 목적으로 ... 무엇이 잘못 될 수 있습니까? 비록 내가 헤더를 통해'sort '함수의'switching '을 수행 할지라도. – MrPaulch

+3

'boost :: sort'는'std :: sort'의 관점에서 구현되므로 무의미한 연습입니다. –

답변

3

Neil Kirk's 클레임을 뒷받침하기 위해 boost/range/algorithm/sort.hpp 헤더를 살펴볼 수 있습니다. 실제로 range::sortstd::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; 
} 

이렇게 할 필요가 없습니다.

출처 : 부스트는 N이

O (N 로그 (N)) (평균 최악의 경우 모두)의 비교입니다

range::sort의 페이지는 std::sort의 복잡성을 반영 복잡성을 나열 거리 (rng).

출처 : cppreference

O (N · 로그 (N)) 여기서 평균 N = 표준 : 거리 (첫 번째, 마지막) 비교. (C++ 11까지)

O (N · log (N)). 여기서 N은 std :: distance (first, last) 비교입니다. (이후 C++ 11)

+0

나는 나의 주장이 확증 될 때 그것을 좋아한다. 똑딱 같은 느낌입니다. –

+0

답변 해 주셔서 감사합니다. 2014 년 11 월 9 일 Boost 메일 링리스트에서 Steven Ross의 정렬 라이브러리에 대한 공식적인 리뷰가 발표되었습니다. 따라서 아직 개선되지 않았기 때문에 오인되었습니다. 내 목표는 부스트 라이브러리에 넣거나 만들 수있는 새로운 정렬 알고리즘을 실험하는 것이다. http://en.wikipedia.org/wiki/Spreadsort http://lists.boost.org/mailman/listinfo.cgi/boost-announce – AntonioLimosani

관련 문제