#include <algorithm>
#include <vector>
#include <map>
#include <iostream>
#include <random>
template <typename T>
std::map<T, std::size_t> map_count(const std::vector<T>& v)
{
std::map<T, std::size_t> res;
for (const auto& e: v) { res[e]++; }
return res;
}
template <typename T>
std::pair<const T, std::size_t> find_mode(const std::map<T, std::size_t>& m)
{
if (m.empty()) {throw std::runtime_error("empty map");}
return *std::max_element(m.begin(),
m.end(),
[](const auto& lhs, const auto& rhs){ return lhs.second < rhs.second; }
);
}
int main()
{
std::default_random_engine engine(static_cast<unsigned>(time(NULL)));
std::uniform_int_distribution<int> u(10, 16);
std::vector<int> v(24);
for (auto& e : v) {
e = u(engine);
std::cout << e << " ";
}
std::cout << std::endl;
const auto m = map_count(v);
std::cout << "The mode value is " << find_mode(m).first << std::endl;
std::cout << "The modes are ";
for (const auto& p : m) {
std::cout << "{" << p.first << ", " << p.second << "} ";
}
std::cout << std::endl;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmFuZG9tPgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0ZDo6bWFwPFQsIHN0ZDo6c2l6ZV90PiBtYXBfY291bnQoY29uc3Qgc3RkOjp2ZWN0b3I8VD4mIHYpCnsKICAgIHN0ZDo6bWFwPFQsIHN0ZDo6c2l6ZV90PiByZXM7CgogICAgZm9yIChjb25zdCBhdXRvJiBlOiB2KSB7IHJlc1tlXSsrOyB9CiAgICByZXR1cm4gcmVzOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RkOjpwYWlyPGNvbnN0IFQsIHN0ZDo6c2l6ZV90PiBmaW5kX21vZGUoY29uc3Qgc3RkOjptYXA8VCwgc3RkOjpzaXplX3Q+JiBtKQp7CiAgICBpZiAobS5lbXB0eSgpKSB7dGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJlbXB0eSBtYXAiKTt9CgogICAgcmV0dXJuICpzdGQ6Om1heF9lbGVtZW50KG0uYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdKGNvbnN0IGF1dG8mIGxocywgY29uc3QgYXV0byYgcmhzKXsgcmV0dXJuIGxocy5zZWNvbmQgPCByaHMuc2Vjb25kOyB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKfQoKaW50IG1haW4oKQp7CglzdGQ6OmRlZmF1bHRfcmFuZG9tX2VuZ2luZSBlbmdpbmUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRpbWUoTlVMTCkpKTsKCXN0ZDo6dW5pZm9ybV9pbnRfZGlzdHJpYnV0aW9uPGludD4gdSgxMCwgMTYpOwoJc3RkOjp2ZWN0b3I8aW50PiB2KDI0KTsKCQogICAgZm9yIChhdXRvJiBlIDogdikgewogICAgICAgIGUgPSB1KGVuZ2luZSk7CiAgICAgICAgc3RkOjpjb3V0IDw8IGUgPDwgIiAiOwogICAgfQogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgY29uc3QgYXV0byBtID0gbWFwX2NvdW50KHYpOwogICAgCiAgICBzdGQ6OmNvdXQgPDwgIlRoZSBtb2RlIHZhbHVlIGlzICIgPDwgZmluZF9tb2RlKG0pLmZpcnN0IDw8IHN0ZDo6ZW5kbDsKCiAgICBzdGQ6OmNvdXQgPDwgIlRoZSBtb2RlcyBhcmUgIjsKICAgIGZvciAoY29uc3QgYXV0byYgcCA6IG0pIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgInsiIDw8IHAuZmlyc3QgPDwgIiwgIiA8PCBwLnNlY29uZCA8PCAifSAiOwogICAgfQogICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKfQ==
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}