【发布时间】:2013-05-23 08:01:47
【问题描述】:
我需要一个只读的 std:map 数据结构,这意味着我必须用数据填充一次,然后只读取这些值,永远不要更改它们或添加其他值。
我的非常量版本如下所示:
//in .h
#include <string>
#include <map>
std::map<std::string, int> myMap;
void initMap();
//in .cpp
#include "foo.h"
void initMap() {
myMap["Keys"] = 42;
}
然后我会在我的代码中调用一次initMap() 并完成。
现在我已经在这里阅读了几个问题,并且为地图实现 const-ness 似乎并非易事。
将其设为std::map<std::string, const int> 将不允许我将其填入initMap()。
用非常量临时填充它,并且定义上的复制构造函数也不起作用,因为复制构造函数不容易将非常量版本作为输入。
将其设为const std::map<std::string, int>(我可以在定义期间使用非常量副本填充)将禁止使用[] 运算符进行值访问。
那么有没有办法实现(值)const-ness和初始化结构(最好在头文件中)?
顺便说一句:C++0x、C++11 和 boost:: 都不是一个选项。
【问题讨论】:
-
您想要“只读的 std:map 数据结构”,还是想要带有只读元素的地图?
-
我想要前者,但如果这让我成为
[]运营商,我可以接受后者。
标签: c++ dictionary stl constants c++03