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 を使用しています。

4

6 に答える 6

12

Visual Studio 2008 では、Technical Report 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 は C++0x をサポートしていないため、VC 2008 の <tr1/unordered_map>ヘッダーと名前空間を使用する必要があります。std::tr1::unordered_map

コメントで引用した問題に答えるには。
また、VS2008 の機能パックをダウンロードしてください。

サポートされている新機能のリストを確認してください。

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

Visual C++ 2008は、 ではなく、unordered_mapnamespace で宣言します。http://msdn.microsoft.com/en-us/library/bb982522(VS.90).aspxの「要件」セクションを参照してください。std::tr1std

于 2011-06-11T06:58:03.717 に答える
2

あなたのコードはVS2010で意図したとおりに機能しています。TWOの出力付き!それがあなたが得ていないものである場合。VC++ 2010 Express Edition に切り替える必要があるかもしれません。
おそらくVC++ 2008にはTR1が含まれていません

于 2011-06-11T06:56:02.803 に答える
1

C++03 では、名前空間unordered_mapで定義されます (定義されている場合)。std::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 に答える