有没有一种方法可以防止在STL无序映射上插入或擦除
Is there a way to prevent insert or erase on STL unordered_map?
我经常使用具有固定/常量键但值可变的无序映射。示例:如果您有一个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
的现有实现,以删除insert
和erase
。
您可以通过私有继承从std::map派生自己的map类,并且只公开您想要提供访问权限的std::map函数。
取一个已排序的pair<const K, V>
s的std::vector
。编写手动[]
、find
和begin
以及您关心的几个方法。
map
很慢,它慢的原因之一是它允许新的元素。如果不允许使用新元素,那么就编写一个速度快得离谱的容器。
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 在C应用程序中运行C++(带有STL)函数
- 使用2个键的cpp-stl::优先级队列排序不正确
- 递归无序映射
- 在STL容器中使用模板类
- c++找不到具有相同哈希的无序集合元素
- 正在将无序映射设置为无序映射的值
- 智能指针作为无序映射键,并通过引用进行比较
- 用C++中的CPerson(类)类型的对象初始化STL矢量
- 将stl字符串缩小到小于15个字符的容量
- 使用无序映射在STL中存储键值对
- 安全方便的通用散列(用于 STL 无序集和映射)习语?
- 有没有一种方法可以防止在STL无序映射上插入或擦除
- 为什么这些C++ STL 无序集合不被视为相等?
- STL 无序映射 - 插入到向量中
- STL 无序容器迭代器
- 具有自定义密钥类型的STL无序映射
- 如何调整无序STL容器以仅存储键值对的值
- STL哈希表[无序映射]查找性能与大小