Я хочу создать статическую карту отношений, известных во время компиляции:
{
{k11, v1}, {k12, v1}, {k13, v1}, ...
{k21, v2}, {k22, v2}, {k23, v2}, ...
...
{kn1, vn}, {kn2, vn}, {kn3, vn}, ...
}
Это может включать много пар ключ-значение для каждой строки, поэтому я бы предпочел написать это так:
{
{v1, {k11, k12, k13, ...}},
{v2, {k21, k22, k23, ...}},
...
{vn, {kn1, kn2, kn3, ...}}
}
Каков самый простой (наиболее читаемый) способ добиться этого?
Я бы хотел увидеть место, где раздаются такие домашние задания ... Я пишу код для своей работы и стараюсь сделать его как можно более читабельным. Написав более 1000 строк таких жестко закодированных карт, я хочу посмотреть, смогу ли я сделать их более краткими.
Если вы хотите, чтобы ваш код был рассмотрен, перейдите на codereview.stackexchange.com.
Одно из решений, которое я могу придумать, - использовать следующую функцию:
#include <vector>
#include <tuple>
#include <map>
template <typename TValue, typename TKey>
std::map<TKey, TValue> reverse_map(
std::vector<std::tuple<TValue, std::vector<TKey> > > const & relations){
std::map<TKey, TValue> res;
for (auto const & value_keys : relations){
for(auto const & key : std::get<1u>(value_keys))
res[key] = std::get<0u>(value_keys);
}
return res;
}
Я не уверен, как выполнение такой функции влияет на время работы. Я был бы рад услышать, есть ли у кого-нибудь понимание этого или лучшие решения.
Это пахнет домашним заданием, так что вам лучше проявить немного усилий. Тем не менее, самый простой способ - просто делать то, что для вас проще всего. Если этого решения недостаточно, то самый простой способ не подходит для решения проблемы. «легкий» на самом деле недостаточно конкретен.