如何使用stl :: map作为二维数组

时间:2010-08-03 02:36:33

标签: c++ stl

您能告诉我们如何使用stl:map作为二维数组吗?我想像mymap [i] [j]那样访问各个元素,我事先不知道i或j的值是什么。有没有更好的想法以其他方式做同样的事情?

3 个答案:

答案 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