fork download
  1. #include <vector>
  2. #include <string>
  3. #include <numeric>
  4. #include <algorithm>
  5. #include <iostream>
  6. #include <iomanip>
  7.  
  8. template <typename T, typename U, typename V>
  9. void print_parallel(const T& a, const U& b, const V& idx)
  10. {
  11. for (unsigned i = 0; i < a.size(); ++i)
  12. {
  13. std::cout << std::left << std::setw(10) << a[idx[i]];
  14. std::cout << std::right << std::setw(10) << b[idx[i]] << '\n';
  15. }
  16. }
  17.  
  18. int main()
  19. {
  20. std::vector<std::string> aminals = { "dog", "cat", "giraffe", "rabbit", "snake" };
  21. std::vector<double> values = { 2.3, 19.0, 5.67, 4, 1.004 };
  22.  
  23. auto by_aminal = [&](unsigned i, unsigned j) { return aminals[i] < aminals[j]; };
  24. auto by_value = [&](unsigned i, unsigned j) { return values[i] < values[j]; };
  25.  
  26. std::vector<unsigned> indices(aminals.size());
  27. std::iota(indices.begin(), indices.end(), 0);
  28.  
  29. std::cout << "Before sort by value:\n";
  30. print_parallel(aminals, values, indices);
  31.  
  32. std::sort(indices.begin(), indices.end(), by_value);
  33.  
  34. std::cout << "\nAfter sort by value:\n";
  35. print_parallel(aminals, values, indices);
  36.  
  37. std::sort(indices.begin(), indices.end(), by_aminal);
  38.  
  39. std::cout << "\nAfter sort by aminal:\n";
  40. print_parallel(aminals, values, indices);
  41. }
  42.  
Success #stdin #stdout 0s 3480KB
stdin
Standard input is empty
stdout
Before sort by value:
dog              2.3
cat               19
giraffe         5.67
rabbit             4
snake          1.004

After sort by value:
snake          1.004
dog              2.3
rabbit             4
giraffe         5.67
cat               19

After sort by aminal:
cat               19
dog              2.3
giraffe         5.67
rabbit             4
snake          1.004