检查多维地图元素是否存在的最快方法是什么?

时间:2017-03-15 10:15:18

标签: c++ dictionary

假设n是某个已知的固定数字。假设我像这样制作一个n维地图

map < int , map < int, map < /* ... */ < int, map< int, double > > /*...*/ > mymap;

要检查是否存在元素mymap[a][b]...[n],需要检查的是什么?

编辑:此问题与副本不同,因为它将重复的问题推广到任意维度。

1 个答案:

答案 0 :(得分:3)

有这样的东西(这里仅使用lambda用于演示目的):

bool exists = [&my_map](int i, int j) -> bool
{
    auto it = my_map.find(i);
    return it != my_map.end() && it->second.find(j) != it->second.end();
};

用法:

if (exists(i, j)) { /* ... */ }

对于递归情况,我使用模板化过载集:

bool exists(const std::map<int, double>& m, int key)
{
    return m.find(key) != m.end();
}

template <typename... Args, typename ...Krgs>
bool exists(const std::map<int, Args...>& m, int key, Krgs ...keys)
{
    auto it = m.find(key);
    return it != m.end() && exists(it->second, keys...);
}