C++中的无序映射出错

Errors with unordered_map in C++?

本文关键字:映射 出错 无序 C++      更新时间:2023-10-16

我在家用电脑上使用Visual C++为一个班编写程序,但我试图在学校的linux电脑上运行它,但我遇到了这些错误。

std::tr1::unordered_map <string, Word*> map;

这两个错误都出现在上方的代码行上

ISO C++禁止声明没有类型的"无序映射"

应为";"在'<'之前代币

最初我使用hash_map,但发现它只能在Visual C++中使用

感谢

GCC和MSVC以不同的方式定义TR1扩展,因为TR1标准对如何向用户提供TR1标准不明确。它只是指定应该有一些编译器选项来激活TR1。

与MSVC不同,GCC将头放在TR1子目录中。有两种方法可以访问它们:

  1. 添加命令行选项-isystem /usr/include/c++/<GCC version>/tr1。这更符合要求,但似乎会引起问题
  2. 使用条件编译:

    #ifdef __GNUC__
    #include <tr1/unordered_map>
    #else
    #include <unordered_map>
    #endif
    

    这暴露了GCC的不符合性:TR1不是通过设置选项来激活的,而是通过修改代码来激活的。

    有一种有点深奥的方法:计算头名称。

    #ifdef __GNUC__
    #define TR1_HEADER(x) <tr1/x>
    #else
    #define TR1_HEADER(x) <x>
    #endif
    #include TR1_HEADER(unordered_map)
    

    这样,你只需要包含"一次"