您能告诉我们如何将stl:map用作二维数组吗?我想像mymap[i][j]一样访问单个元素,但事先不知道i或j的值。还有其他更好的方法可以实现相同的功能吗?
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,然后是"My map contains a value for [9][2]"。
std::map
没有operator[] const
)。 - dreamlaxelse { cout << "不包含 [9][2] 的值"; }
吧? - Graphics Noobtypedef 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
来搜索单个值。std::map
要求键可进行小于比较。Carlos 的解决方案之所以有效,是因为 std::pair
提供了字典序小于比较器。http://www.sgi.com/tech/stl/pair.html - rwongstd::map<std::pair<int, std::pair<int, int> >, int>
。最好使用Boost的tuple类型或者自己编写结构体和构造函数。正如rwong所指出的,你还需要一个小于比较运算符。 - Carlos Scheidegger考虑使用kd树。每个分支级别将依次比较i和j的值。请参见http://en.wikipedia.org/wiki/Kd-tree。