ネストしたmap

4d mapping in C++?


ネストしたmapは、

map<string, map<string, map<string, int> > > employees;
employees["person1"]["gender"]["age"] = 200;

のように書くより、キーをtupleにしてしまった方が管理が楽。

map<tuple<string, string, string>, int> employees;
employees[make_tuple("person1", "gender", "age")] = 200;

そして、それよりもクラスを作ろう。

#include <map>
#include <string>
#include <tuple>

struct Employee {
    std::string person;
    std::string sex;
    std::string age;
};

bool operator<(const Employee& a, const Employee& b)
{
    return std::tie(a.person, a.sex, a.age) < std::tie(b.person, b.sex, b.age);
}

int main()
{
    std::map<Employee, int> employees;
    employees[{"person1", "gender", "age"}] = 200;
}