6 #ifndef MYRAMATH_UTILITY_SORTPERM_H 7 #define MYRAMATH_UTILITY_SORTPERM_H 18 #include <myramath/utility/detail/ssize.h> 28 : i(in_i), index(in_index) { }
40 bool operator() (
const Pair& a,
const Pair& b)
41 {
return cmp(*(a.i),*(b.i)); }
43 const Comparator& cmp;
49 template<
class Iterator,
class Comparator>
50 std::vector<int>
sortperm(Iterator begin, Iterator end,
const Comparator& cmp)
54 typedef std::vector<Pair> Pairs;
55 Pairs pairs; pairs.reserve(std::distance(begin,end));
56 for (Iterator i = begin; i != end; ++i)
57 pairs.push_back( Pair(i,ssize(pairs)) );
61 std::vector<int> perm; perm.reserve(pairs.size());
62 for (
typename Pairs::const_iterator i = pairs.begin(); i != pairs.end(); ++i)
63 perm.push_back(i->index);
68 template<
class Iterator>
69 std::vector<int>
sortperm(Iterator begin, Iterator end)
71 typedef typename std::iterator_traits<Iterator>::value_type T;
72 typedef std::less<T> Comparator;
73 return sortperm(begin,end,Comparator());
std::vector< int > sortperm(Iterator begin, Iterator end, const Comparator &cmp)
Given a range, returns the permutation that will place it in sorted order according to cmp()...
Definition: sortperm.h:50
Definition: sortperm.h:34
Definition: random.cpp:45
Definition: sortperm.h:24