fork download
  1. #include <unordered_map>
  2. #include <map>
  3. #include <vector>
  4. #include <algorithm>
  5. #include <type_traits>
  6. #include <string>
  7. #include <iostream>
  8.  
  9. int main()
  10. {
  11. using namespace std;
  12.  
  13. std::unordered_map<std::string, const int> master =
  14. {{ {"ABC", 123}
  15. , {"GHI", 345}
  16. , {"DEF", 123}
  17. , {"XYZ", 234}
  18. , {"UVW", 234}
  19. }};
  20.  
  21. std::cout << "=== master data(unordered_map) ===\n";
  22. for(const auto& p : master)
  23. std::cout << p.first << " : " << p.second << "\n";
  24.  
  25. auto sorted_by_key =
  26. std::map<decltype(master)::key_type, decltype(master)::mapped_type>
  27. (std::begin(master), std::end(master))
  28. ;
  29.  
  30. std::cout << "=== sort by key ===\n";
  31. for(const auto& p : sorted_by_key)
  32. std::cout << p.first << " : " << p.second << "\n";
  33.  
  34. std::vector
  35. < std::pair<std::remove_const<decltype(sorted_by_key)::key_type>::type
  36. , std::remove_const<decltype(sorted_by_key)::mapped_type>::type>
  37. > sorted_by_mapped(std::begin(sorted_by_key), std::end(sorted_by_key));
  38.  
  39. std::stable_sort
  40. ( std::begin(sorted_by_mapped), std::end(sorted_by_mapped)
  41. , [](const decltype(sorted_by_mapped)::value_type& a, const decltype(sorted_by_mapped)::value_type& b)
  42. { return a.second < b.second; }
  43. );
  44.  
  45. std::cout << "=== sort by mapped (with stable key)\n";
  46. for(const auto& p : sorted_by_mapped)
  47. std::cout << p.first << " : " << p.second << "\n";
  48. }
Success #stdin #stdout 0s 3484KB
stdin
Standard input is empty
stdout
=== master data(unordered_map) ===
UVW : 234
ABC : 123
GHI : 345
XYZ : 234
DEF : 123
=== sort by key ===
ABC : 123
DEF : 123
GHI : 345
UVW : 234
XYZ : 234
=== sort by mapped (with stable key)
ABC : 123
DEF : 123
UVW : 234
XYZ : 234
GHI : 345