如果您只需要迭代所有元素,并且不需要循环特定维度,那么您可以使用一个简单的对作为 unordered_map 的键,如下所示:
typedef std::pair<int,int> Coordinates;
typedef std::unordered_map<Coordinates,void *> TwoDimensionalNodes;
(请注意,我使用了 STL 而不是 Boost,unordered_map 现在也是标准 STL 的一部分)。
获取特定值只需编写:
twoDimensionalNodes[std::make_pair(x,y)]
(如果您不确定该值是否在您的地图中,请使用 find )。
要进行迭代,只需迭代无序映射即可:
for (auto it=twoDimensionalNodes.begin();it!=twoDimensionalNodes.end();++it)
{
std::cout << "x=" << it->first.first;
std::cout << "y=" << it->first.second;
std::cout << "value=" << it->second;
}
为了使其更具可读性,我更喜欢首先从迭代器获取坐标,如下所示:
for (auto it=twoDimensionalNodes.begin();it!=twoDimensionalNodes.end();++it)
{
Coordinates &coordinates = it->first;
std::cout << "x=" << coordinates.first;
std::cout << "y=" << coordinates.second;
std::cout << "value=" << it->second;
}
如果您的维度超过 2 个,请使用 std::tuple,或者只需编写您自己的坐标类作为地图的键。