c – 使用const键但非const值映射?

前端之家收集整理的这篇文章主要介绍了c – 使用const键但非const值映射?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一种情况,我希望有一个地图,不允许在初始化后添加/删除键,但允许更改值(因此我不能简单地使地图const).即
/*semi-const*/ map<int,int> myMap = initMap();

myMap[1] = 2;                  // NOT OK,because potentially adds a new key
myMap.at(1) = 2;               // OK,because works only if key is present
for (auto & element : myMap) {
    element.second = 0;        // OK,values may change
}

我可以为std :: map编写我自己的包装器,但我觉得它不是太常见,所以我想知道是否已经有一个现有的解决方案.

是否有一些标准习惯用于地图不允许添加/删除键,而值可能会改变?

ps:我知道单独的标题有点模糊,因为键在地图中已经是常量,但我希望很清楚我的意思是什么……

解决方法

你能创建一个包含值的包装器,它允许在const时将值变换并将其放入地图中吗?就像是:
template<typename T>
class Mutable {
    mutable T value;
public:
  const Mutable& operator=(const T& v) const { value = v; return *this; }
  T& get() const { return value; }  
};

那么你的地图可以是类型

const std::map<int,Mutable<int>>

Live demo.

原文链接:https://www.f2er.com/c/110419.html

猜你在找的C&C++相关文章