#include <map>
#include <vector>
#include <iostream>
using std::cout;
using std::endl;
// Iterator pair based interface
template <class Iterator>
std::map<typename Iterator::value_type,int>
count(Iterator begin, Iterator end) {
std::map<typename Iterator::value_type,int> counts;
for (Iterator i = begin; i != end; ++i)
counts[*i]++;
return counts;
}
// Sequence interface
template <class Sequence>
inline std::map<typename Sequence::value_type,int>
count(Sequence seq) {
return count(seq.begin(), seq.end());
}
int main()
{
std::vector<int> x;
x.push_back(1);
x.push_back(2);
x.push_back(3);
x.push_back(2);
x.push_back(2);
std::map<int,int> counts = count(x);
for (std::map<int,int>::iterator c = counts.begin(), e = counts.end(); c != e; ++c)
cout << c->first << '\t' << c->second << endl;
}
I2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6ZW5kbDsKCgovLyBJdGVyYXRvciBwYWlyIGJhc2VkIGludGVyZmFjZQp0ZW1wbGF0ZSA8Y2xhc3MgSXRlcmF0b3I+CnN0ZDo6bWFwPHR5cGVuYW1lIEl0ZXJhdG9yOjp2YWx1ZV90eXBlLGludD4KY291bnQoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCkgewogICAgc3RkOjptYXA8dHlwZW5hbWUgSXRlcmF0b3I6OnZhbHVlX3R5cGUsaW50PiBjb3VudHM7CiAgICBmb3IgKEl0ZXJhdG9yIGkgPSBiZWdpbjsgaSAhPSBlbmQ7ICsraSkKICAgICAgICBjb3VudHNbKmldKys7CiAgICByZXR1cm4gY291bnRzOwp9CgovLyBTZXF1ZW5jZSBpbnRlcmZhY2UKdGVtcGxhdGUgPGNsYXNzIFNlcXVlbmNlPgppbmxpbmUgc3RkOjptYXA8dHlwZW5hbWUgU2VxdWVuY2U6OnZhbHVlX3R5cGUsaW50Pgpjb3VudChTZXF1ZW5jZSBzZXEpIHsKICAgIHJldHVybiBjb3VudChzZXEuYmVnaW4oKSwgc2VxLmVuZCgpKTsKfQoKCmludCBtYWluKCkKewogICAgc3RkOjp2ZWN0b3I8aW50PiB4OwogICAgeC5wdXNoX2JhY2soMSk7CiAgICB4LnB1c2hfYmFjaygyKTsKICAgIHgucHVzaF9iYWNrKDMpOwogICAgeC5wdXNoX2JhY2soMik7CiAgICB4LnB1c2hfYmFjaygyKTsKICAgIAogICAgc3RkOjptYXA8aW50LGludD4gY291bnRzID0gY291bnQoeCk7CiAgICBmb3IgKHN0ZDo6bWFwPGludCxpbnQ+OjppdGVyYXRvciBjID0gY291bnRzLmJlZ2luKCksIGUgPSBjb3VudHMuZW5kKCk7IGMgIT0gZTsgKytjKQogICAgICAgIGNvdXQgPDwgYy0+Zmlyc3QgPDwgJ1x0JyA8PCBjLT5zZWNvbmQgPDwgZW5kbDsKfQ==