2013-04-05 2 views
3

Salut non ordonnée J'essaie d'insérer un enregistrement dans un coup de pouce :: unordered_mapinsert pour stimuler la carte

Carte est définie comme

boost::unordered_map<int,Input> input_l1_map; 

où la classe est entrée

class Input { 

     int id; 
     std::string name; 
     std::string desc; 
     std::string short_name; 
     std::string signal_presence; 
     std::string xpnt; 
     } 

J'utilise une fonction pour insérer l'enregistrement comme ci-dessous

void RuntimeData::hash_table(int id,Input input) 
{ 

    this->input_l1_map.insert(id,input); 

} 

J'ai lu la documentation de boost, il dit une fonction insert() pour insérer des données dans le conteneur, mais quand je compile il montre une erreur.

+1

À l'avenir, vous devriez nous dire quelle est l'erreur. –

Répondre

3

Où vous trouvez cette méthode insert?

std::pair<iterator, bool> insert(value_type const&); 
    std::pair<iterator, bool> insert(value_type&&); 
    iterator insert(const_iterator, value_type const&); 
    iterator insert(const_iterator, value_type&&); 
    template<typename InputIterator> void insert(InputIterator, InputIterator); 

value_type est

typedef Key         key_type;    
    typedef std::pair<Key const, Mapped>   value_type; 

de here

Vous devez utiliser this->input_l1_map.insert(std::make_pair(id, input));

0

La façon la plus naturelle, l'OMI, d'écrire ce serait

input_l1_map[id] = input; 

Allthough

input_l1_map.insert({ id,input }); // C++11 

serait ok aussi.

Sinon, il y aura un typedef pour les paires stockées dans la carte:

typedef boost::unordered_map<int,Input> InputMap; 
InputMap input_l1_map; 

maintenant, vous pouvez le rendre explicite:

InputMap::value_type item(id, input); 
input_l1_map.insert(item); 
+1

L'opérateur [] et insert() ne font pas la même chose cependant. insert insérera seulement la nouvelle valeur si aucune valeur avec cette clé n'existe. operator [] renvoie une référence à la valeur existante (si elle existe) ou insère la valeur (si ce n'est pas le cas) et renvoie une référence à cette valeur. – harmic

1

insert prend une value_type, qui est défini comme:

typedef std::pair<Key const, Mapped> value_type;

void RuntimeData::hash_table(int id,Input input) 
{ 

    this->input_l1_map.insert(std::make_pair(id,input)); 

} 
Questions connexes