有没有一种方法可以防止在STL无序映射上插入或擦除

Is there a way to prevent insert or erase on STL unordered_map?

本文关键字:无序 STL 映射 擦除 插入 一种 方法 有没有      更新时间:2023-10-16

我经常使用具有固定/常量键但值可变的无序映射。示例:如果您有一个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

可以在STLunordered_map上防止插入或擦除,但允许更新?

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

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

取一个已排序的pair<const K, V>s的std::vector。编写手动[]findbegin以及您关心的几个方法。

map很慢,它慢的原因之一是它允许新的元素。如果不允许使用新元素,那么就编写一个速度快得离谱的容器。