gcc 中是不是有 stdext::hash_map 的等价物
Posted
技术标签:
【中文标题】gcc 中是不是有 stdext::hash_map 的等价物【英文标题】:Is there an equivalent for stdext::hash_map in gccgcc 中是否有 stdext::hash_map 的等价物 【发布时间】:2015-04-28 18:53:29 【问题描述】:我正在将一些代码从 Visual Studio 移植到 Mingw GCC,我遇到了这种类型
typedef stdext::hash_map<std::string, SubApplication*> SubApplMap;
现在据我了解,这不是标准类型。我遇到了这个thread aand this,它建议通过执行以下操作将其替换为 unordered_map
#include <unordered_map>
#define stdext std
#define hash_map unordered_map
结果我得到以下错误
error: 'hash_multimap' is not a member of 'std'
#define stdext std
^
关于我可以用什么替换此容器的任何建议?
【问题讨论】:
那些#define
s 是个坏主意,你应该做这个工作并将stdext::hash_map
替换为std::unordered_map
。希望接口足够相似,不会有太多的工作。至于错误,我的猜测是您的代码在其他地方使用了stdext::hash_multimap
,而#define stdext std
则搞砸了。将该类型替换为std::unordered_multimap
【参考方案1】:
代替
typedef stdext::hash_map<std::string, SubApplication*> SubApplMap;
我会一起摆脱hash_map
using SubApplMap = std::unordered_map<std::string, SubApplication*>;
而不是尝试使用预处理器宏玩游戏。
请注意,这需要 C++11。
【讨论】:
是的,我启用了 C++11。我的 typedef 也在我的班级里。我应该评论 typedef 并将上面的语句而不是它(在类内)吗? 是的,你应该这样做。其实不要随便注释掉,删掉这行:) 我收到以下错误error: expected ';' before 'SubApplMap' using SubApplMap = std::unordered_map<std::string, SubApplication*> SubApplMap;
有什么建议吗?
在分号之前的语句末尾有一个额外的SubApplMap
,去掉它。以上是关于gcc 中是不是有 stdext::hash_map 的等价物的主要内容,如果未能解决你的问题,请参考以下文章
使用 gcc (resp. MinGW) 编译器的 C 中函数的参数数量是不是有上限?
gcc 中是不是有 stdext::hash_map 的等价物
clang 是不是有相当于 GCC 的 -mno-vzeroupper 标志?