使用Visual C++ 2008时,出现了“std::unordered_map未声明标识符”的问题。

6
#include <iostream>
#include <string>
#include <unordered_map>

using namespace std;

int main()
{
    unordered_map< int, string > m;

    m[1] = "one";   
    m[2] = "two";
    m[4] = "four";
    m[3] = "three";
    m[2] = "TWO!";
    cout << m[2] << endl;

    m.clear();
    return 0;
}

我正在学习,但无法理解。编译器抛出错误,指出类型unordered_map未声明。

我正在使用Visual C++ 2008 Express Edition。

6个回答

12

在Visual Studio 2008中,技术报告1(TR1)中的类位于命名空间std :: tr1中。 添加:

using namespace std::tr1;

添加到你的代码中。


谢谢,完全没问题的Coda,它运行正常。所以这就是我缺少的+1。 - munish

9
在TR1中,unordered_map可以从头文件<tr1/unordered_map>中使用,命名空间为std::tr1::unordered_map
在即将发布的C++0x标准中,unordered_map可以从头文件<unordered_map>中使用,命名空间为std::unordered_map
因为vc 2008不支持C++0x,所以您应该使用<tr1/unordered_map>头文件和std::tr1::unordered_map命名空间。
回答您在评论中提到的问题。另外,请确保下载了VS2008功能包!请检查新功能支持列表。
New containers (tuple, array, unordered set, etc)

1
+1 对于适当的建议表示赞同,但仍存在一个错误-->致命错误C1083: 无法打开包括文件:'tr1/unordered_map':没有那个文件或目录。 - munish

4

2

您的代码在VS2010中按预期工作。如果输出为TWO而您没有得到该结果,可能应该切换到VC++ 2010 Express Edition。
可能VC++ 2008不包括TR1。


1
在C++03中,unordered_map被定义在std::tr1命名空间中(如果它被定义的话)。
因此,您应该使用:
std::tr1::unordered_map<int, std::string> m;

-1
也许您要找的是 stdext::hash_map(包含在<hash_map>中)?据我所知,VC++ 2008 Express不包括TR1。

它在哪里说它可以与Express版本一起使用?我刚试图安装它,希望自己错了,但是失败了。由于问题明确指出了Express,我假设TR1必须不存在。 - Justin Aquadro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接