#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
std::map<std::string, std::size_t> compute_frequencies(const std::vector<std::string>& words)
{
std::map<std::string, std::size_t> res;
for(const auto& word : words) {
res[word]++;
}
return res;
}
std::vector<std::pair<std::string, std::size_t>> as_vector(const std::map<std::string, std::size_t>& m)
{
return {m.begin(), m.end()};
}
int main() {
const std::vector<std::string> words{
"qwe", "asd", "qwe", "asd", "zxc", "asd", "zxc", "qwe", "qwe", "asd", "sdf", "asd", "fsd"
};
auto frequencies = as_vector(compute_frequencies(words));
std::partial_sort(frequencies.begin(), frequencies.end(), frequencies.begin() + 2,
[](const auto& lhs, const auto& rhs) {
return lhs.second > rhs.second;
});
for (std::size_t i = 0; i != 2; ++i) {
std::cout << frequencies[i].first << " " << frequencies[i].second << std::endl;
}
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8dmVjdG9yPgoKCnN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnNpemVfdD4gY29tcHV0ZV9mcmVxdWVuY2llcyhjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4mIHdvcmRzKQp7CiAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzaXplX3Q+IHJlczsKICAgIGZvcihjb25zdCBhdXRvJiB3b3JkIDogd29yZHMpIHsKICAgICAgICByZXNbd29yZF0rKzsKICAgIH0KICAgIHJldHVybiByZXM7ICAgIAp9CgpzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8c3RkOjpzdHJpbmcsIHN0ZDo6c2l6ZV90Pj4gYXNfdmVjdG9yKGNvbnN0IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnNpemVfdD4mIG0pCnsKICAgIHJldHVybiB7bS5iZWdpbigpLCBtLmVuZCgpfTsKfQoKaW50IG1haW4oKSB7CiAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gd29yZHN7CiAgICAgICAgInF3ZSIsICJhc2QiLCAicXdlIiwgImFzZCIsICJ6eGMiLCAiYXNkIiwgInp4YyIsICJxd2UiLCAicXdlIiwgImFzZCIsICJzZGYiLCAiYXNkIiwgImZzZCIKICAgIH07CiAgICBhdXRvIGZyZXF1ZW5jaWVzID0gYXNfdmVjdG9yKGNvbXB1dGVfZnJlcXVlbmNpZXMod29yZHMpKTsKICAgIHN0ZDo6cGFydGlhbF9zb3J0KGZyZXF1ZW5jaWVzLmJlZ2luKCksIGZyZXF1ZW5jaWVzLmVuZCgpLCBmcmVxdWVuY2llcy5iZWdpbigpICsgMiwKICAgICAgICBbXShjb25zdCBhdXRvJiBsaHMsIGNvbnN0IGF1dG8mIHJocykgewogICAgICAgICAgICByZXR1cm4gbGhzLnNlY29uZCA+IHJocy5zZWNvbmQ7ICAgIAogICAgICAgIH0pOwogICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSAhPSAyOyArK2kpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgZnJlcXVlbmNpZXNbaV0uZmlyc3QgPDwgIiAiIDw8IGZyZXF1ZW5jaWVzW2ldLnNlY29uZCA8PCBzdGQ6OmVuZGw7ICAKICAgIH0KfQo=