необъявленный идентификатор std :: unordered_map с использованием Visual C ++ 2008 - PullRequest
4 голосов
/ 11 июня 2011
#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 голосов
/ 11 июня 2011

В Visual Studio 2008 классы в Техническом отчете 1 (TR1) находятся в пространстве имен std :: tr1 .Добавьте:

using namespace std::tr1;

к вашему коду.

8 голосов
/ 11 июня 2011

В TR1 unordered_map доступно из заголовочного файла <tr1/unordered_map> как std::tr1::unordered_map.

В следующем стандарте C ++ 0x он доступен из заголовочного файла <unordered_map> как std::unordered_map.

, поэтому вы должны использовать заголовок <tr1/unordered_map> и пространство имен std::tr1::unordered_map для vc 2008, потому что vc 2008 не поддерживает C ++ 0x.

Чтобы ответить на проблему, которую вы указали в комментарии.
Кроме того, убедитесь, что вы скачали пакет для VS2008 !

Проверьте список поддерживаемых новых функций.

New containers (tuple, array, unordered set, etc)
4 голосов
/ 11 июня 2011

Visual C ++ 2008 объявляет unordered_map в пространстве имен std::tr1, а не std. См. http://msdn.microsoft.com/en-us/library/bb982522(VS.90).aspx, раздел Требования .

2 голосов
/ 11 июня 2011

Ваш код работает так, как задумано в VS2010.С выходом ДВА!если это то, что вы не получаете.Возможно, вам следует перейти на VC ++ 2010 Express Edition.
Возможно, VC ++ 2008 не включает TR1

1 голос
/ 11 июня 2011

В C ++ 03, unordered_map определено в std::tr1 пространстве имен (если оно вообще определено).

Поэтому вы должны использовать:

std::tr1::unordered_map<int, std::string> m;
0 голосов
/ 11 июня 2011

Возможно, вы ищете вместо stdext::hash_map (входит в <hash_map>)?

VC ++ 2008, насколько мне известно, не включает TR1.

...