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

use*_*655 4 c++ stl

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

And*_*ein 22

你可以做

std::map<int, std::map<int, int> > mymap;
Run Code Online (Sandbox Code Playgroud)

例如:

#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;
}
Run Code Online (Sandbox Code Playgroud)

在标准输出上打印7,然后是"我的地图包含[9] [2]的值".

  • 更新了我的答案,以展示如何从地图插入和提取int元素. (2认同)

Car*_*ger 9

安德鲁斯坦的另一种解决方案是与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));
Run Code Online (Sandbox Code Playgroud)

例如,通过这种方式,您无需链接两个调用map::find来搜索单个值.