fork(1) download
  1. #include <algorithm>
  2. #include <vector>
  3. #include <map>
  4. #include <iostream>
  5. #include <random>
  6.  
  7. template <typename T>
  8. std::map<T, std::size_t> map_count(const std::vector<T>& v)
  9. {
  10. std::map<T, std::size_t> res;
  11.  
  12. for (const auto& e: v) { res[e]++; }
  13. return res;
  14. }
  15.  
  16. template <typename T>
  17. std::pair<const T, std::size_t> find_mode(const std::map<T, std::size_t>& m)
  18. {
  19. if (m.empty()) {throw std::runtime_error("empty map");}
  20.  
  21. return *std::max_element(m.begin(),
  22. m.end(),
  23. [](const auto& lhs, const auto& rhs){ return lhs.second < rhs.second; }
  24. );
  25. }
  26.  
  27. int main()
  28. {
  29. std::default_random_engine engine(static_cast<unsigned>(time(NULL)));
  30. std::uniform_int_distribution<int> u(10, 16);
  31. std::vector<int> v(24);
  32.  
  33. for (auto& e : v) {
  34. e = u(engine);
  35. std::cout << e << " ";
  36. }
  37. std::cout << std::endl;
  38.  
  39. const auto m = map_count(v);
  40.  
  41. std::cout << "The mode value is " << find_mode(m).first << std::endl;
  42.  
  43. std::cout << "The modes are ";
  44. for (const auto& p : m) {
  45. std::cout << "{" << p.first << ", " << p.second << "} ";
  46. }
  47. std::cout << std::endl;
  48. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
11 16 16 16 16 13 15 10 14 15 10 13 12 12 14 14 13 15 11 15 10 16 10 13 
The mode value is 16
The modes are {10, 4} {11, 2} {12, 2} {13, 4} {14, 3} {15, 4} {16, 5}