我需要一个只读的 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 似乎并非易事。
将其设为 astd::map<std::string, const int>
将不允许我将其填写在initMap()
. 用非常量临时填充它并且定义上的复制构造函数也不起作用,因为复制构造函数不容易将非常量版本作为输入。
使其成为const std::map<std::string, int>
(我可以在定义期间填充非常量副本)将禁用[]
运算符用于值访问。
那么有没有办法实现(值)const-ness并初始化结构(最好在头文件中)?
顺便说一句:C++0x 和 C++11 都不boost::
是一个选项。