SIRF  3.4.0
multisort.h
1 #ifndef MULTISORT
2 #define MULTISORT
3 
4 #include <algorithm> // stable_sort
5 #include <array> // array
6 #include <numeric> // iota
7 #include <vector> // vector
8 
9 namespace Multisort {
10 
11  template<typename T, size_t N>
12  bool less(const std::array<T, N>& a, const std::array<T, N>& b)
13  {
14  for (unsigned int i = 0; i < N; i++) {
15  if (a[i] < b[i])
16  return true;
17  if (a[i] > b[i])
18  return false;
19  }
20  return false; // all equal
21  }
22 
23  template<typename T, size_t N>
24  void sort(std::vector<std::array<T, N> > v, int* index)
25  {
26  int n = v.size();
27  std::iota(index, index + n, 0);
28  std::stable_sort
29  (index, index + n, [&v](int i, int j){return less(v[i], v[j]); });
30  }
31 
32 } // namespace Multisort
33 
34 #endif
Definition: multisort.h:9