#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;
}