std :: map中有typedef类型吗?

时间:2010-10-28 18:58:56

标签: c++ map typedef

在C ++中执行以下操作是个好主意:

typedef std::map<std::string, boost::any> MyVals;

// Is the following typedef'd type inside a map a good idea?
typedef std::map<std::string, MyVals> TagValues;  

这些地图将用于顺序插入和删除。

6 个答案:

答案 0 :(得分:7)

在typedefing代码中常用的类型中没有什么不好。

Typedef仅存在于语法层面,它们不会对生成的代码进行任何更改。此外,精心挑选的名称将使可读性更好。

比较

std::map<std::string, std::map<std::string, boost::any>::const_iterator it =
         tagValues.find(x);

VS

TagValue::const_iterator it = tagValues.find(x);

答案 1 :(得分:3)

使用typedef没有问题。事实上,好的,以防您以后需要更换底层容器。

嵌套map始终关注我的一件事是确保密钥和值的复制结构有效,或者使用单实例存储(例如shared_ptr)来避免这种情况。特别是如果你进行大量的插入/移除,家务管理的成本可能很高。

答案 2 :(得分:1)

如果您希望以后能够轻松更改MyVals的类型,那么这是完全有效的,通常也是个好主意。在我看来,从我听到/看过/读过的内容来看,这正是typedef的用途。

但是,这是需要注意的事项,您需要确保永远不会将typedef更改为std::map中无法合法使用的内容。如果你这样做,你会遇到一些问题,追踪问题的位置可能会有点痛苦。

答案 3 :(得分:1)

你看到了什么坏事?我肯定会输入任何长期打字的东西......

答案 4 :(得分:1)

没问题。

STL类定义可能很快变得复杂,因此使用typedef定义集合,迭代器等通常很有用。

答案 5 :(得分:1)

typedef没什么问题,但如果你说,MyVals将被插入和移除太多,在STL容器中拥有这样的haevy数据类型可能会因为涉及赋值运算符而变慢。我会考虑在boost :: shared_ptr中包装MyVals。