2010-10-19 3 views
6

J'utilise g ++ dans UbuntuC++ unordered_map question de la compilation avec g ++

g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3

J'ai ce code

#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; 
} 

quand je Compile en utilisant

g++ mycode.cc 

Je suis erreur

error: 'unordered_map' was not declared in this scope 

Ai-je raté quelque chose?

Répondre

9

Dans GCC 4.4.x, vous ne devriez avoir à #include <unordered_map>, et compiler avec cette ligne:

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

Plus d'informations sur C++0x support in GCC.

modifier en ce qui concerne votre problème

Vous devez faire std::make_pair<char, bool>(*s, true) lors de l'insertion.

De plus, votre code n'insérerait qu'un seul caractère (le déréférencement via *s). Avez-vous l'intention d'utiliser un seul char pour une clé, ou avez-vous l'intention de stocker des chaînes?

+0

erreur: aucune fonction de mise en correspondance pour l'appel à « std: : unordered_map , std :: égal à , std :: allocateur >> :: insert (char &, bool) ' – icn

+0

@xlione: Peut vous nous montrez le code? Il semble que vous essayez d'insérer un type de référence dans votre carte. – birryree

+0

mis à jour, merci – icn

19

Si vous ne voulez pas compiler en mode C++ 0x, en changeant le comprennent et l'utilisation de la directive à

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

devrait fonctionner

+1

ça marche! Merci – icn

Questions connexes