123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #ifndef BOOST_ALGORITHM_SORT_SUBRANGE_HPP
- #define BOOST_ALGORITHM_SORT_SUBRANGE_HPP
- #include <functional> // For std::less
- #include <iterator> // For std::iterator_traits
- #include <algorithm> // For nth_element and partial_sort
- #include <boost/config.hpp>
- #include <boost/range/begin.hpp>
- #include <boost/range/end.hpp>
- namespace boost { namespace algorithm {
- template<typename Iterator, typename Pred>
- void sort_subrange (
- Iterator first, Iterator last,
- Iterator sub_first, Iterator sub_last,
- Pred p)
- {
- if (sub_first == sub_last) return;
-
- if (sub_first != first) {
- (void) std::nth_element(first, sub_first, last, p);
- ++sub_first;
- }
- std::partial_sort(sub_first, sub_last, last, p);
- }
- template<typename Iterator>
- void sort_subrange (Iterator first, Iterator last, Iterator sub_first, Iterator sub_last)
- {
- typedef typename std::iterator_traits<Iterator>::value_type value_type;
- return sort_subrange(first, last, sub_first, sub_last, std::less<value_type>());
- }
- template<typename Iterator, typename Pred>
- void partition_subrange (
- Iterator first, Iterator last,
- Iterator sub_first, Iterator sub_last,
- Pred p)
- {
- if (sub_first != first) {
- (void) std::nth_element(first, sub_first, last, p);
- ++sub_first;
- }
-
- if (sub_last != last)
- (void) std::nth_element(sub_first, sub_last, last, p);
- }
- template<typename Iterator>
- void partition_subrange (Iterator first, Iterator last, Iterator sub_first, Iterator sub_last)
- {
- typedef typename std::iterator_traits<Iterator>::value_type value_type;
- return partition_subrange(first, last, sub_first, sub_last, std::less<value_type>());
- }
- }}
- #endif
|