我需要按类型在 map 中键入一些数据。目前我有这样的事情:
struct TypeInfoComparer
{
bool operator()(std::type_info const* a, std::type_info const* b) const
{
return a->before(*b);
};
};
std::map<std::type_info const*, Foo, TypeInfoComparer> d_fooByTypeId;
然后我可以通过使用它来查找(例如,在具有
<typename T>
的模板方法中:auto pair = d_fooByTypeId.find(&typeid(T));
但是今天我正在阅读有关
std::type_index
的信息,它似乎打算在这种情况下使用。我对提高我的C++知识感兴趣。有人可以解释我是否应该修改我的代码以使用
std::type_index
,为什么?除了能够删除TypeInfoComparer
之外,还有其他原因吗? 最佳答案
type_index
是“type_info的简单包装,可以在关联容器(23.4)和无序关联容器(23.5)中用作索引类型”。如果您使用type_index
而不是type_info*
,那么您将不必在 map 中提供显式比较器。唯一的花费就是您需要#include <typeindex>
。
另一个好处是,它将允许您切换到(或也使用)哈希图(也称为unordered_maps)。
总体而言,由于它简化了您的代码,因此我会说“继续”。