有没有办法防止在STL unordered_map上插入或擦除?

时间:2015-05-12 16:29:35

标签: c++ dictionary stl

我经常使用带有固定/常量键的unordered_maps,但是可变值。示例:如果您有enum Dimension{ X, Y },则可能希望为每个数据点存储数据点,但绝不允许对地图进行插入或删除。更新没问题。

初始化示例:

typedef std::unordered_map<Dimension, std::size_t> Dimension_To_Size_Map;
// assume std::hash has template specialisation for enum
Dimension_To_Size_Map dimension_To_Size_Map =
    { { Dimension.X, 0 }, { Dimension.Y, 0 } };
dimension_To_Size_Map[Dimension.X] = 12;  // update is ok
dimension_To_Size_Map[Dimension.Y] = 17;  // update is ok
dimension_To_Size_Map[(Dimension)7] = 22;  // insert not allowed
dimension_To_Size_Map.erase(Dimension.X);  // erase not allowed

可以在STL unordered_map

上阻止插入或擦除,但允许更新

一个想法:复制,重命名和修改unordered_map的现有实施,以删除inserterase

2 个答案:

答案 0 :(得分:4)

您可以通过私有继承从std :: map派生自己的map类,并且只公开要提供访问权限的std :: map函数。

答案 1 :(得分:3)

std::vector进行排序pair<const K, V>。编写手册[]find以及begin以及您关心的几种方法。

map速度很慢,其中一个原因是它允许使用新元素。如果你不允许新的元素,写一个更快的容器。