【发布时间】:2009-09-25 16:37:29
【问题描述】:
我想创建一个带有 int 和我自己的自定义类的地图。有没有办法做到这一点?
map<int, MyClass> myMap;
如果没有,我该怎么做呢?基本上,我想要一个 id(或者最好是 enum)来指向我自己的自定义类。在大多数其他语言中,这将是一个简单的哈希。
【问题讨论】:
我想创建一个带有 int 和我自己的自定义类的地图。有没有办法做到这一点?
map<int, MyClass> myMap;
如果没有,我该怎么做呢?基本上,我想要一个 id(或者最好是 enum)来指向我自己的自定义类。在大多数其他语言中,这将是一个简单的哈希。
【问题讨论】:
#include <map>
std::map<int, MyClass> myMap;
MyClass foo;
myMap[5] = foo;
myMap[5].bar = 10;
您确实需要 MyClass 是默认可复制构造的,以便可以创建它(如果您使用,例如 myMap[5])并将其复制到地图中。
【讨论】:
是的,唯一的条件是:
所以您只需要确保您的对象是可复制构造的,以便可以将其复制到地图中。
【讨论】:
你应该这样使用
typedef std::map myMapType;
myMapType myMap;
但是在插入你的类时要小心,就像你为同一个键插入多次一样,你永远不会收到通知:
调用 myMapType::iterator itr myMap.find(key) ,具体取决于返回类型和您可以处理的程序要求。
同样,尝试使用 [] 操作符访问任何元素,如
somefunc(myMap[10]);
因为即使为键 10 插入了注释,您也不会从地图中收到错误
【讨论】: