高效的指向C ++中的整数映射和查找的指针

时间:2010-09-03 09:02:00

标签: c++ pointers map

我想将指针映射到整数以用于序列化。指针可以是不同类型的,并且可以指向可能使用多重继承的多态对象。我需要查询地图以了解指针是否存储在其中,如果是,那么关联的整数值是什么。

这样做的正确方法是什么?

我想到的map<void*, int>的简单方法不起作用,因为operator <没有为任意指针定义。或者这在普通系统上不是问题吗?

另一个解决方案是拥有vector<void*>。但这需要遍历存储在中的所有指针,我不确定转换为void *是否会破坏使用继承的对象的operator ==

4 个答案:

答案 0 :(得分:6)

您对使用map<void*, int>的初步想法很满意 尽管你没有为指针定义operator<是正确的,但std::map<>使用的谓词是std::less<>,而C ++标准要求std::less<T*>也适用于任意指针。

引用C ++标准来支持这个([lib.comparisons] / 8):

  

对于模板greaterlessgreater_equalless_equal,任何指针类型的特化都会产生总顺序,即使内置运算符{{ 1}},<><=不会。

答案 1 :(得分:1)

为什么不简单地为所有可序列化的类引入一个虚拟基类?

class Serializable
{
};

map< Serializable *, int > integralMap;

答案 2 :(得分:0)

你可以只做一个unsigned int32 / 64到int的映射(取决于x86或x64)。只需将void *转换为unsigned int,它就会愉快地进行比较。

答案 3 :(得分:0)