您能告诉我们如何使用stl:map作为二维数组吗?我想像mymap [i] [j]那样访问各个元素,我事先不知道i或j的值是什么。有没有更好的想法以其他方式做同样的事情?
答案 0 :(得分:22)
你可以做到
std::map<int, std::map<int, int> > mymap;
例如:
#include <map>
#include <iostream>
int main()
{
std::map<int, std::map<int, int> > mymap;
mymap[9][2] = 7;
std::cout << mymap[9][2] << std::endl;
if (mymap.find(9) != mymap.end() && mymap[9].find(2) != mymap[9].end()) {
std::cout << "My map contains a value for [9][2]" << std::endl;
} else {
std::cout << "My map does not contain a value for [9][2]" << std::endl;
}
return 0;
}
在标准输出上打印7,然后“我的地图包含[9] [2]的值”。
答案 1 :(得分:9)
安德鲁·斯坦(Andrew Stein)的另一种解决方案是使用其他STL更好的方法就是使用
typedef std::map<std::pair<int, int>, int > AMapT;
AMapT mymap;
mymap[std::make_pair(2, 4)] = 10;
...
AMapT::iterator f = mymap.find(std::make_pair(3, 5));
例如,通过这种方式,您无需将两个调用链接到map::find
即可搜索单个值。
答案 2 :(得分:0)
考虑使用kd树。每个分支级别将依次比较i和j值。请参阅http://en.wikipedia.org/wiki/Kd-tree。