#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
// who likes typing
typedef std::vector<std::string> MyVector;
typedef std::map<std::string, unsigned int> MyMap;
class MapCount
{
private:
MyMap& theMap;
public:
MapCount(MyMap& arg) : theMap(arg) { }
// used by for_each
void operator ()(const std::string& s) { ++theMap[s]; }
};
int main()
{
MyVector myVector = { "foo","foo","bar","roo","foo","bar" };
MyMap mymap;
std::for_each(myVector.begin(), myVector.end(), MapCount(mymap));
for (MyMap::const_iterator it = mymap.begin(); it != mymap.end(); ++it)
std::cout << it->first << '\t' << it->second << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKLy8gd2hvIGxpa2VzIHR5cGluZwp0eXBlZGVmIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBNeVZlY3RvcjsKdHlwZWRlZiBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgdW5zaWduZWQgaW50PiBNeU1hcDsKCmNsYXNzIE1hcENvdW50CnsKcHJpdmF0ZToKICAgIE15TWFwJiB0aGVNYXA7CiAgICAKcHVibGljOgogICAgTWFwQ291bnQoTXlNYXAmIGFyZykgOiB0aGVNYXAoYXJnKSB7IH0KICAgIAogICAgLy8gdXNlZCBieSBmb3JfZWFjaAogICAgdm9pZCBvcGVyYXRvciAoKShjb25zdCBzdGQ6OnN0cmluZyYgcykgeyArK3RoZU1hcFtzXTsgfQp9OwoKaW50IG1haW4oKQp7CiAgICBNeVZlY3RvciBteVZlY3RvciA9IHsgImZvbyIsImZvbyIsImJhciIsInJvbyIsImZvbyIsImJhciIgfTsKICAgIAogICAgTXlNYXAgbXltYXA7CiAgICBzdGQ6OmZvcl9lYWNoKG15VmVjdG9yLmJlZ2luKCksIG15VmVjdG9yLmVuZCgpLCBNYXBDb3VudChteW1hcCkpOwogICAgCiAgICBmb3IgKE15TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG15bWFwLmJlZ2luKCk7IGl0ICE9IG15bWFwLmVuZCgpOyArK2l0KQogICAgICAgIHN0ZDo6Y291dCA8PCBpdC0+Zmlyc3QgPDwgJ1x0JyA8PCBpdC0+c2Vjb25kIDw8IHN0ZDo6ZW5kbDsKICAgIAogICAgcmV0dXJuIDA7Cn0=