OOE*_*eer 6 c++ string map c++11 visual-studio-2012
我有一个在MSVS 2010 SP1下工作正常的项目.我正在尝试将其转换为MSVS 2012 RC.我不得不改变一些东西,主要与C++头/ lib路径和MFC自定义东西有关.但我有最后一个障碍需要澄清.
在MSVC 2010中,我使用了很多unordered_map<basic_string<TCHAR>, int>或者map<basic_string<TCHAR>, int>.它汇编很好.但是在MSVS 2012中,我只是得到了这个错误:"C++标准没有为这种类型提供哈希"
在网络上搜索一个位后,我发现MSVS 2012应更接近C++ 11标准,并且该标准只定义的散列函数为基本类型和4点定义的字符串的类型(其中string和wstring,但basic_string不包括).所以我改变了所有basic_string<TCHAR>到wstring,但无济于事......我仍然得到同样的错误.
我该怎么办才能再次编译我的应用程序?
显然使用OOEngineer basic_string而不包括<string>标题.无论如何,部分功能可能是可见的,通过其他标头的间接包含.
当VS2010发布时,当时提出的标准将所有特化都std::hash<>放在<functional>标题中.在最后的C++ 11标准它被决定,这是更好的,以与各自的容器一起把这些,所以一些hash<>特被转移到<string>,<vector>等
因此,要使用所有(或任何,真正的)功能std::string,您必须自己包含<string>标头,而不是依赖于另一个系统标头.