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 速成版。

4

6 回答 6

12

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

using namespace std::tr1;

到你的代码。

于 2011-06-11T06:59:19.750 回答
9

TR1 unordered_map中,可以从头<tr1/unordered_map>文件中获得std::tr1::unordered_map.

在即将到来的C++0x标准中,它可以从头<unordered_map>文件中以std::unordered_map.

所以你应该使用vc 2008 的<tr1/unordered_map>标头和std::tr1::unordered_map命名空间,因为 vc 2008 不支持 C++0x。

回答您在评论中引用的问题。
另外,请确保您下载了VS2008 的功能包

检查新功能支持列表。

New containers (tuple, array, unordered set, etc)
于 2011-06-11T06:57:42.637 回答
4

Visual C++ 2008unordered_map在命名空间中声明std::tr1,而不是在std. 请参阅http://msdn.microsoft.com/en-us/library/bb982522(VS.90).aspx要求部分。

于 2011-06-11T06:58:03.717 回答
2

您的代码在 VS2010 中按预期工作。输出两个!如果那是你没有得到的。可能你应该切换到 VC++ 2010 Express Edition。
可能 VC++ 2008 不包括 TR1

于 2011-06-11T06:56:02.803 回答
1

在 C++03 中,unordered_mapstd::tr1命名空间中定义(如果有定义的话)。

所以你应该使用:

std::tr1::unordered_map<int, std::string> m;
于 2011-06-11T06:58:22.523 回答
-1

也许您正在寻找stdext::hash_map(包含在 中<hash_map>)?

据我所知,VC++ 2008 express 不包括 TR1。

于 2011-06-11T06:54:54.957 回答