#include <iostream>
#include <map>
#include <vector>
#include <string>

struct ClassA {
    int val;
    ClassA(int v) : val(v) {}
};
bool operator<(const ClassA& lhs, const ClassA& rhs) { return lhs.val < rhs.val; }

ClassA key1(1);
ClassA key2(2);
ClassA key3(3);

std::map<ClassA, std::vector<std::pair<std::string, std::string>>> stringMap;

void functionA()
{
    // no point
}

void functionB()
{
    stringMap[key1].push_back(std::make_pair("foo", "bar"));
    stringMap[key1].push_back(std::make_pair("baz", "xyzzy"));
    stringMap[key2].push_back(std::make_pair("one", "two"));
    stringMap[key3].push_back(std::make_pair("one", "two"));
}

void functionC()
{
    stringMap.clear();
}

int main()
{
    functionB();
    for(auto& v: stringMap)
    {
        std::cout << v.first.val << " => {";
        for(auto& p: v.second)
            std::cout << " '" << p.first << "','" << p.second << "' ";
        std::cout << "}\n";
    }
    functionC();
}
