Проблема компиляции c ++ unordered_map с g ++ - PullRequest
6 голосов
/ 20 октября 2010

Я использую g ++ в Ubuntu

g ++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3

У меня есть этот код

#include<unordered_map>
using namespace std;

bool ifunique(char *s){
  unordered_map<char,bool> h;
  if(s== NULL){
    return true;
  }
  while(*s){
    if(h.find(*s) != h.end()){
      return false;
    }
    h.insert(*s,true);
    s++;
  }
  return false;
}

когда я компилирую, используя

g++ mycode.cc

Я получил ошибку

 error: 'unordered_map' was not declared in this scope

Я что-то упустил?

Ответы [ 2 ]

19 голосов
/ 20 октября 2010

Если вы не хотите компилировать в режиме C ++ 0x, измените директиву include и using на

#include <tr1/unordered_map>
using namespace std::tr1;

должно работать

11 голосов
/ 20 октября 2010

В GCC 4.4.x вам нужно будет только #include <unordered_map> и скомпилировать эту строку:

g++ -std=c++0x source.cxx

Дополнительная информация о поддержке C ++ 0x в GCC .

изменить относительно вашей проблемы

Вы должны сделать std::make_pair<char, bool>(*s, true) при вставке.

Кроме того, ваш код будет вставлять только один символ (разыменование через *s). Намереваетесь ли вы использовать один char для ключа, или вы хотели хранить строки?

...