如何使用“const unordered_map”?

时间:2016-07-18 02:26:02

标签: c++ visual-c++ const unordered-map

我想声明一个const unordered_map,但是我遇到编译器错误,我无法弄清楚正确的语法。我发现的所有例子都是非const的,我正在做的就是我所知道的唯一的const例子,但是我遇到了编译器错误。这是我的代码:

typedef const std::unordered_map<std::string,int> StringIntMap;
StringIntMap string_to_case {
   {"get",1},
   {"add",2}
};

vs 110给了我:

Error   1   error C2601: 'string_to_case' : local function definitions are illegal  

或者如果我在string_to_case和我得到的括号之间放置一个等号:

Error   1   error C2552: 'string_to_case' : non-aggregates cannot be initialized with initializer list

vs 120_CTP_Nov2012而是给我以下有或没有等号:

error C2440: 'initializing' : cannot convert from 'initializer-list' to 'std::unordered_map<std::string,int,std::hash<_Kty>,std::equal_to<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>'
1>          with
1>          [
1>              _Kty=std::string
1>  ,            _Ty=int
1>          ]
1>          No constructor could take the source type, or constructor overload resolution was ambiguous

我做错了什么?

1 个答案:

答案 0 :(得分:1)

这适用于gcc 6.1.1:

$ cat t.C
#include <unordered_map>
#include <string>

typedef const std::unordered_map<std::string,int> StringIntMap;
StringIntMap string_to_case = {
   {"get",1},
   {"add",2}
};
$ g++ -g -c -std=c++1z -o t.o t.C
$ g++ --version
g++ (GCC) 6.1.1 20160621 (Red Hat 6.1.1-3)

你没有做错任何事。您遇到了编译器错误,您的编译器不支持最新的C ++标准。