假设n是某个已知的固定数字。假设我像这样制作一个n维地图
map < int , map < int, map < /* ... */ < int, map< int, double > > /*...*/ > mymap;
要检查是否存在元素mymap[a][b]...[n]
,需要检查的是什么?
编辑:此问题与副本不同,因为它将重复的问题推广到任意维度。
答案 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...);
}