C ++ STL映射,自定义类为第二类

时间:2009-09-25 16:37:29

标签: c++ map

我想创建一个带有int和我自己的自定义类的地图。有没有办法做到这一点?

map<int, MyClass> myMap;

如果没有,我该如何完成此操作?基本上,我想要一个id(或者最好是enum)来指向我自己的自定义类。在大多数其他语言中,这将是一个简单的哈希。

3 个答案:

答案 0 :(得分:10)

#include <map>

std::map<int, MyClass> myMap;

MyClass foo;
myMap[5] = foo;
myMap[5].bar = 10;

您确实需要MyClass是默认和可复制的,因此可以创建它(如果您使用,例如myMap[5])并复制到地图中。

答案 1 :(得分:4)

是唯一的条件是:

  • 关键类型具有可比性(好)
  • 值Type是可复制构造的吗?

所以你只需要确保你的对象是可复制的,这样就可以将它复制到地图中。

答案 2 :(得分:0)

你应该像这样使用

typedef std :: map myMapType;

myMapType myMap;

但是在插入课程时要小心,就像你为同一个键插入多次一样,你永远不会得到通知:

调用myMapType :: iterator itr myMap.find(key),具体取决于返回类型和您可以获得的程序要求。

同样明智的尝试使用[]运算符(如

)来访问任何元素
 somefunc(myMap[10]);

因为即使插入密钥10

,也不会从地图中收到错误