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
                 ^

关于我可以用什么替换此容器的任何建议?

【问题讨论】:

那些#defines 是个坏主意,你应该做这个工作并将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&lt;std::string, SubApplication*&gt; SubApplMap; 有什么建议吗? 在分号之前的语句末尾有一个额外的SubApplMap,去掉它。

以上是关于gcc 中是不是有 stdext::hash_map 的等价物的主要内容,如果未能解决你的问题,请参考以下文章

使用 gcc (resp. MinGW) 编译器的 C 中函数的参数数量是不是有上限?

gcc 中是不是有 stdext::hash_map 的等价物

clang 是不是有相当于 GCC 的 -mno-vzeroupper 标志?

当短路评估可能导致函数未被调用时,是不是有 gcc 警告标志?

怎么查看linux 是不是安装gcc

交叉编译时是不是有 gcc 选项来打印目标三元组?