std :: sort를 boost :: sort로 대체하여 성능을 비교하고 싶습니다. 동료는 boost : sort를 호출하는 std :: sort의 재정의를 사용하여 공유 라이브러리를 만든 다음 LD_PRELOAD를 사용하여 새 공유 라이브러리를 가져 와서 std : sort를 재정의 할 것을 권장했습니다. 이게 효과가 있니? 그렇다면 누군가 stl 함수를 대체하는 방법의 예를 게시 할 수 있습니까?std :: sort를 boost :: sort로 대체하십시오.
답변
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;
}
이렇게 할 필요가 없습니다.
이출처 : 부스트는 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)
나는 나의 주장이 확증 될 때 그것을 좋아한다. 똑딱 같은 느낌입니다. –
답변 해 주셔서 감사합니다. 2014 년 11 월 9 일 Boost 메일 링리스트에서 Steven Ross의 정렬 라이브러리에 대한 공식적인 리뷰가 발표되었습니다. 따라서 아직 개선되지 않았기 때문에 오인되었습니다. 내 목표는 부스트 라이브러리에 넣거나 만들 수있는 새로운 정렬 알고리즘을 실험하는 것이다. http://en.wikipedia.org/wiki/Spreadsort http://lists.boost.org/mailman/listinfo.cgi/boost-announce – AntonioLimosani
- 1. std :: sort를 올바르게 구현하십시오.
- 2. std :: sort를 사용하여 벡터 정렬
- 3. std :: sort를 사용하여 정렬 집합
- 4. std :: sort로 배열 배열을 정렬하는 방법?
- 5. std :: sort를 사용할 때 코어 덤프
- 6. std :: sort를 사용하여 구조체 쌍으로 목록 정렬
- 7. std :: sort를 사용하여 C 문자열 배열 정렬
- 8. std :: sort를 사용하여 내림차순으로 클래스의 벡터 정렬
- 9. std :: binary_search 또는 std :: sort를 사용하여 구조체 배열을 정렬하는 방법
- 10. std :: boost :: arrays 목록
- 11. std :: sort를 사용하여 포인터 벡터를 정렬하면 주소가 뒤죽박죽이됩니까?
- 12. boost :: trim 및 std :: bind2nd
- 13. Boost :: bind 및 std :: copy
- 14. boost :: any_cast 및 std :: optional의
- 15. boost :: variant 및 std :: find_if
- 16. boost :: assign with std :: map
- 17. boost :: factory and std :: function
- 18. boost :: variant는 std :: string에서 작동합니까?
- 19. boost :: python std :: array convert
- 20. 유닉스에서 sort로 실제 숫자를 정렬하십시오.
- 21. find_if 함수를 대체하십시오.
- 22. std :: vector <boost :: function> with boost :: bind
- 23. std :: map 내에서 중첩 된 std :: set으로 boost :: assign을 사용합니다.
- 24. const std :: map <boost :: tuples :: tuple, std :: string>?
- 25. multi_index composite_key 반복자로 대체하십시오.
- 26. std :: tr1 :: array와 boost :: array의 차이점
- 27. boost :: ptr_vector를 항상 std :: vector에서 사용해야합니까?
- 28. std :: reference_wrapper를 푸는 방법 boost :: unwrap_reference
- 29. std :: function에서 boost :: python :: object 만들기
- 30. boost :: shared_ptr 및 std :: shared_ptr 공존
나는 그것을 권장합니다 - std :: sort of boost :: sort를 테스트하기 위해 가지고있는'sort' 함수에 할당하고 그 함수를 호출하면 안됩니다 ? –
원칙적으로 테스트 목적으로 ... 무엇이 잘못 될 수 있습니까? 비록 내가 헤더를 통해'sort '함수의'switching '을 수행 할지라도. – MrPaulch
'boost :: sort'는'std :: sort'의 관점에서 구현되므로 무의미한 연습입니다. –