矢量在地图中的地图

Rei*_*ugh 0 c++ dictionary vector

typedef vector<string>              tdv_Str;
typedef map<string, tdv_Str, CaseI> tdm_StrList; // var name, possible values
typedef map<short, tdm_StrList>     tdm_VarList; // type, var list
Run Code Online (Sandbox Code Playgroud)

*CaseI是字符串映射排序,不区分大小写.

当我检查tdm_VarList(list)的密钥是否存在时:

if (list.count(key) == 0)
// ...
Run Code Online (Sandbox Code Playgroud)

然后编译它,我得到以下错误:

1>c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xtree(1089): error C2220: warning treated as error - no 'object' file generated
1>          c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\map(81) : see reference to class template instantiation 'std::_Tree<_Traits>' being compiled
1>          with
1>          [
1>              _Traits=std::_Tmap_traits<short,tdm_StrList,std::less<short>,std::allocator<std::pair<const short,tdm_StrList>>,false>
1>          ]
1>          Src\APS.cpp(683) : see reference to class template instantiation 'std::map<_Kty,_Ty>' being compiled
1>          with
1>          [
1>              _Kty=short,
1>              _Ty=tdm_StrList
1>          ]
1>c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xtree(1089): warning C4503: 'std::_Tree<_Traits>::_Insert' : decorated name length exceeded, name was truncated
1>          with
1>          [
1>              _Traits=std::_Tmap_traits<short,tdm_StrList,std::less<short>,std::allocator<std::pair<const short,tdm_StrList>>,false>
1>          ]
Run Code Online (Sandbox Code Playgroud)

Hag*_*zen 6

您将警告("超出装饰名称长度")提升为错误.换句话说,您定义的复杂类型的内部名称已超过4096个字符.警告信息的相应MS文档更详细地解释了问题,并提出了工作原理.