#include <map>
#include <ctime>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
struct MyObject
{
std::string name;
int information;
MyObject(const std::string& name, int information)
: name(name), information(information) {}
};
int main()
{
std::srand(std::time(0));
std::vector<MyObject> dataVec;
std::multimap<std::string, MyObject*> dataMap;
// Give each object a random letter
// between A-J as a name and some data
for(auto i = 0; i < 10; ++i)
dataVec.emplace_back(std::string(1, 'A' + std::rand() % 10), i);
// Fill dataMap from dataVec
for(auto&& data: dataVec)
dataMap.emplace(data.name, &data);
// Select the correct type for calling the equal_range function
decltype(dataMap.equal_range("")) range;
// iterate through multimap's elements (by key)
for(auto i = dataMap.begin(); i != dataMap.end(); i = range.second)
{
// Get the range of the current key
range = dataMap.equal_range(i->first);
// Now print out that whole range
for(auto d = range.first; d != range.second; ++d)
std::cout << d->first << ": " << d->second->information << '\n';
}
}
I2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxhbGdvcml0aG0+CgpzdHJ1Y3QgTXlPYmplY3QKewogICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgIGludCBpbmZvcm1hdGlvbjsKCiAgICBNeU9iamVjdChjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgaW50IGluZm9ybWF0aW9uKQogICAgOiBuYW1lKG5hbWUpLCBpbmZvcm1hdGlvbihpbmZvcm1hdGlvbikge30KfTsKCmludCBtYWluKCkKewogICAgc3RkOjpzcmFuZChzdGQ6OnRpbWUoMCkpOwoKICAgIHN0ZDo6dmVjdG9yPE15T2JqZWN0PiBkYXRhVmVjOwogICAgc3RkOjptdWx0aW1hcDxzdGQ6OnN0cmluZywgTXlPYmplY3QqPiBkYXRhTWFwOwoKICAgIC8vIEdpdmUgZWFjaCBvYmplY3QgYSByYW5kb20gbGV0dGVyCiAgICAvLyBiZXR3ZWVuIEEtSiBhcyBhIG5hbWUgYW5kIHNvbWUgZGF0YQogICAgZm9yKGF1dG8gaSA9IDA7IGkgPCAxMDsgKytpKQogICAgICAgIGRhdGFWZWMuZW1wbGFjZV9iYWNrKHN0ZDo6c3RyaW5nKDEsICdBJyArIHN0ZDo6cmFuZCgpICUgMTApLCBpKTsKCiAgICAvLyBGaWxsIGRhdGFNYXAgZnJvbSBkYXRhVmVjCiAgICBmb3IoYXV0byYmIGRhdGE6IGRhdGFWZWMpCiAgICAgICAgZGF0YU1hcC5lbXBsYWNlKGRhdGEubmFtZSwgJmRhdGEpOwoKICAgIC8vIFNlbGVjdCB0aGUgY29ycmVjdCB0eXBlIGZvciBjYWxsaW5nIHRoZSBlcXVhbF9yYW5nZSBmdW5jdGlvbgogICAgZGVjbHR5cGUoZGF0YU1hcC5lcXVhbF9yYW5nZSgiIikpIHJhbmdlOwoKICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBtdWx0aW1hcCdzIGVsZW1lbnRzIChieSBrZXkpCiAgICBmb3IoYXV0byBpID0gZGF0YU1hcC5iZWdpbigpOyBpICE9IGRhdGFNYXAuZW5kKCk7IGkgPSByYW5nZS5zZWNvbmQpCiAgICB7CiAgICAgICAgLy8gR2V0IHRoZSByYW5nZSBvZiB0aGUgY3VycmVudCBrZXkKICAgICAgICByYW5nZSA9IGRhdGFNYXAuZXF1YWxfcmFuZ2UoaS0+Zmlyc3QpOwoKICAgICAgICAvLyBOb3cgcHJpbnQgb3V0IHRoYXQgd2hvbGUgcmFuZ2UKICAgICAgICBmb3IoYXV0byBkID0gcmFuZ2UuZmlyc3Q7IGQgIT0gcmFuZ2Uuc2Vjb25kOyArK2QpCiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCBkLT5maXJzdCA8PCAiOiAiIDw8IGQtPnNlY29uZC0+aW5mb3JtYXRpb24gPDwgJ1xuJzsKICAgIH0KfQoK