Y a-t-il un conteneur bien connu (dans boost par exemple) qui fournit un accès à la même valeur en utilisant différentes clés du même type. Toutes les clés sont uniques. Chaque valeur peut avoir un nombre variable de clés.
Voici une implémentation très naïve:
class multi_key_map
{
std::unordered_map flatMap;
public:
multi_key_map(std::initializer_list, std::string>> map)
{
for (auto& kvp : map)
{
for (auto&& key : kvp.first)
{
flatMap.emplace(std::move(key), kvp.second);
}
}
}
const std::string& operator[](std::string& key) const
{
return flatMap.at(key);
}
};
const multi_key_map vals =
{
{ { "k1", "k2", "k3" }, "val1" },
{ { "k4", "k5" }, "val2" },
{ { "k6" }, "val3" }
};
assert(vals["k1"] == "val1");
assert(vals["k2"] == "val1");
assert(vals["k4"] == "val2");
Mais je ne veux pas réinventer la roue. J'ai examiné boost.multiindex mais je ne trouve pas la solution simple souhaitée avec un nombre variable de clés. Et il semble que boost.multiindex a été développé pour d'autres fins que les miennes.