我想使用std :: map通过使用两个整数作为键查找来存储指向结构的指针,例如:
std::map<int, int, my_struct*> my_map;
理想情况下,我想编写类似于:
的代码struct my_struct* test1 = get_struct_ptr();
my_map[1, 5] = test1;
目前我收到了my_map定义的错误:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/map:524:17:
error: called object type 'my_struct *' is not a function or function pointer
有没有办法用std :: map执行此操作,还是有其他类型可以处理此要求?
答案 0 :(得分:5)
map
总是从一种类型到另一种类型。您可以使用std::pair<int, int>
创建一个类型,以便为密钥存储两个int
,所以:
std::map<std::pair<int, int>, my_struct*> my_map;
my_map[{1, 5}] = test1;
或者,您可以使用std::tuple<int, int>
,std::array<int, 2>
或struct
与两个int
数据成员(但之后您必须“教授” map
如何通过使用您自己的operator<
来比较这些结构;许多现有问题和答案详细说明如何执行此操作。