我经常使用带有固定/常量键的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
的现有实施,以删除insert
和erase
。
答案 0 :(得分:4)
您可以通过私有继承从std :: map派生自己的map类,并且只公开要提供访问权限的std :: map函数。
答案 1 :(得分:3)
对std::vector
进行排序pair<const K, V>
。编写手册[]
和find
以及begin
以及您关心的几种方法。
map
速度很慢,其中一个原因是它允许使用新元素。如果你不允许新的元素,写一个更快的容器。