一个非常简单的问题,但我找不到答案。我想这样做:
ClassA* a = MapOf_ptrMap[key1][key2];
使用 MapOf_ptrMap a map< string , ( map < string, ClassA* >)* >
对象。
MapOf_ptrMap[key1]
返回指向 map<string, ClassA*>
的指针对象(在这一点上我想让你知道这不是我设计的,我只是要处理它)。
我试过了 #define X[Key1][Key2] (*(X[Key1]))[Key2]
但由于括号,它不起作用。我知道它适用于括号,但我宁愿保留括号。同样困扰我的是 define
别名不采用 X
的类型考虑到:我想用 MapOf_ptrMap
检查输入类型类型。
有什么想法吗?
最佳答案
坦率地说,define
并不是“定义”类型的好方法。
改用typedef
。
为了我们的理智,让我们把它分解一下:
using namespace std;
typedef map<string, ClassA *> map_value_t;
typedef map<string, map_value_t *> map_t;
具有 std::
限定类型的版本(意大利面条怪兽的意图):
typedef std::map<std::string, ClassA *> map_value_t;
typedef std::map<std::string, map_value_t *> map_t;
现在您应该能够声明类型为 map_t
的对象。
现在的问题是,我们如何从这个糟糕的结构中取出东西?
map_t &blah; // comes from somewhere else.
map_value_t *submap = blah[i];
ClassA *value = *submap[j];
关于c++ - map of map 的 typedef 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15685461/