Подтвердить что ты не робот

Ошибка С++: "unordered_map" не называет тип

Я делаю все правильно, насколько я могу судить, и я получил сообщение об ошибке:

error: 'unordered_map' does not name a type
error: 'mymap' does not name a type

В моем коде у меня есть:

#include <unordered_map>

using namespace std;

//global variable
unordered_map<string,int> mymap;
mymap.reserve(7000);

void main {
  return;
}

Я не вижу, чего здесь не хватает...

EDIT: когда я обновляю свое объявление до

std::tr1::unordered_map<string,int> mymap;

Я могу устранить первую ошибку, но когда я пытаюсь зарезервировать, я все равно получаю второе сообщение об ошибке.

EDIT2: Как указано ниже, резерв должен быть включен в основной файл и мне нужно скомпилировать флаг

-std=c++0x

Однако по-прежнему появляются ошибки, связанные с unordered_map, а именно:

error: 'class std::tr1::unordered_map<std::basic_string<char>, int>' has no member named 'reserve'
4b9b3361

Ответ 1

Скомпилировать с g++ -std=c++11 (моя версия gcc gcc 4.7.2) И

#include <unordered_map>
#include <string>

using namespace std;

//global variable
unordered_map<string,int> mymap;

int main() {
  mymap.reserve(7000); // <-- try putting it here
  return 0;
}

Ответ 2

Вы не можете execute arbitrary expressions at global scope, поэтому вы должны поставить

mymap.reserve(7000);

внутри основного.

Это справедливо и для других контейнеров STL, таких как карта и вектор.

Ответ 3

Если вы хотите поддерживать <unordered_map> для версий старше С++ 11, используйте #include<tr1/unordered_map> и объявите свои карты в форме: - std::tr1::unordered_map<type1, type2> mymap
который будет использовать расширение технического отчета 1 для обратной совместимости.