value_type用于将指针作为键的映射

时间:2011-10-17 14:06:41

标签: c++ stl map

据我所知,C ++将map<a,b>::value_type定义为pair<const a,b>

如果我在地图中使用指针类型作为键类型会发生什么,即

std::map<const char*,int>::value_type::first_type = const char*

正如我从上面的定义或

所期望的那样
std::map<const char*,int>::value_type::first_type = const char* const

因为更合乎逻辑(因为否则我将被允许从地图迭代器中更改键值)?

3 个答案:

答案 0 :(得分:11)

您的推理是正确的,value_type::first将是char const * const

const T T type * const type *typedef时,有一个常见的混淆源,但事实并非如此。与宏不同,const T不是文本替换,也不是模板参数。执行T后,如果typedefconst或模板参数,则表示您要在整个类型中添加const

这就是我喜欢在类型右边写T const * s的原因之一,因为它会减少混淆:T const * const,添加额外的const,得到{{1}}

答案 1 :(得分:2)

如果aconst char*,那么const a确实是const char* const

答案 2 :(得分:0)

您的评估是正确的,但您必须非常小心这种方法有两个原因:

  1. 您必须提供自定义比较器谓词,该谓词执行const char *的正确排序(例如,使用strcmp的变体,如果key1&lt; key2,则仅返回true)。如果你不这样做,你的字符串将按指针值排序,这几乎总是不是你想要的。
  2. 您必须考虑地图中密钥的生命周期以及在销毁地图时如何解除分配。