Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用stl::map作为二维数组_C++_Stl - Fatal编程技术网

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

C++ 如何使用stl::map作为二维数组,c++,stl,C++,Stl,您能告诉我们如何使用stl:map作为二维数组吗?我想像mymap[I][j]一样访问单个元素,在这里我事先不知道I或j的值是什么。用其他方法做同样的事情,还有更好的办法吗?你可以这样做 std::map<int, std::map<int, int> > mymap; std::map mymap; 例如: #include <map> #include <iostream> int main() { std::map<in

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

你可以这样做

std::map<int, std::map<int, int> > mymap;
std::map 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;
}
#包括
#包括
int main()
{
std::map mymap;
mymap[9][2]=7;

std::cout可以考虑改用kd树。每个级别的分支将依次比较i和j值。请参阅。

与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));
typedef std::map AMapT;
AMapT-mymap;
mymap[std::make_pair(2,4)]=10;
...
AMapT::迭代器f=mymap.find(std::make_pair(3,5));

例如,使用这种方法,您不需要通过链接两个调用
map::find
来搜索单个值。

您能告诉我如何在此映射中插入元素吗?您能提供一个示例吗?在我的情况下,我需要在映射中存储对象指针。谢谢。谢谢您的回复。现在如何检查是否有元素在索引i,j?更新了我的答案,以显示如何从映射中插入和提取int元素。谢谢。我想知道如何找出索引i,j处是否存在有效元素?这意味着我想测试位置[i][j]的有效性在我尝试访问元素之前。@Andrew Stein:+1,但是您检查存在性的方法的缺点是不能在常量限定方法中使用它(因为
std::map
没有
运算符[]const
)。你使用地图有什么原因吗?没有,没有具体的原因。你能告诉我是否有更好的选择吗?@ebtest,你知道i和j的值的极限是多少吗?我能用它作为一个三维数组吗?值得指出的是,
std::map
要求密钥小于可比性。Carlos的解决方案之所以有效,是因为
std::pair
提供的字典比comparator少。ebtest可以,但它会变得很难看:
std::map
。使用boost的元组类型或您自己使用的结构和构造函数可能更好。正如rwong指出的,您还需要一个小于比较运算符。一些使用KD tr的示例如能:/