让我们说我有一个地图使用一个int数组作为键,另一个int作为值:
map<int, map<int, map<int, int> > > mp;
如何查看此映射以检查密钥是否存在,然后获取该密钥的值?
我试过
map<int, map<int, map<int, int> > >::iterator it = mp[1][3].find(4);
x = it->second;
然而,这会产生错误。为什么这是错的?
编辑:我使用3d数组int得到了错误,而不是浮点数
答案 0 :(得分:3)
也许更好的结构是存储3d索引并将其用作键的类?
map<index3D, int> mp;
然后你可以做类似
的事情if(mp.count(index3D(ix, iy, iz)) > 0) // do something
答案 1 :(得分:1)
// Assuming v1, v2 and v3 are int indices
if(mp.find(v1) != mp.end() &&
mp[v1].find(v2) != mp[v1].end() &&
mp[v1][v2].find(v3) != mp[v1][v2].end())
{
// Key exist
const int &value = mp[v1][v2][v3];
...
}
else
{
// Key does not exis
...
}
如果它对你来说效果更好,你可以保存临时迭代器/引用并使用嵌套循环。
实现相同功能的另一种更简单的方法是使用std::tuple<int, int, int>
或std::pair< std::pair<int, int>, int >
作为密钥。并非std::tuple
和std::pair
都提供operator <
。
有什么问题
mp[1][3].find(4)
您无法在cons
引用中应用它。如果mp[1]
或mp[1][3]
不存在,则此代码将无需创建新地图。