2012-01-15 4 views
2

Existe-t-il un moyen d'obtenir toutes les clés d'une hash_map STL? Ou dois-je utiliser quelque chose comme set ou hash_set pour les enregistrer avant l'insertion?Comment obtenir toutes les clés de STL hash_map?

+0

Notez que dans toutes les solutions proposées les touches sont non ordonnée (ce qui est bien, pourquoi l'ordre s'il n'y a pas besoin ?) Si vous en avez besoin commandé, vous devrez trier le résultat –

Répondre

6
hash_map<string, void *> hashMap; 

vector<string> keys; 
keys.reserve(hashMap.size()); 

for (hash_map<string, void *>::iterator iter = hashMap.begin(); 
             iter != hashMap.end(); 
             ++iter) 
{ 
    keys.push_back(iter->first); 
} 
+0

Je pense que vous voulez dire "iter.first" –

4

Il suffit de parcourir le hash_map; Pour chaque itération, iter->first est la clé.

4

Miser sur la réponse de Igor Oks:

hash_map<string, void *> hashMap; 

vector<string> keys; 
keys.reserve(hashMap.size()); 

transform(hashMap.begin(), hashMap.end(), back_inserter(keys), 
    select1st<hash_map<string, void*>::value_type>()); 
0

Vous voudrez peut-être itérer le hash_map, et extraire le premier élément de la paire pointée par la valeur iterator actuelle (le premier élément de la paire est en fait une clé).

// Assuming that hm is an instance of hash_map: 
for (auto it = hm.begin(); it != hm.end(); ++it) // for each item in the hash map: 
{ 
    // it->first is current key 
    // ... you can push_back it to a vector<Key> or do whatever you want 
} 

Cette fonction est possible d'extraire les clés d'un hash_map à un vecteur:

template <typename Key, typename Type, typename Traits, typename Allocator> 
vector<Key> extract_keys(const hash_map<Key, Type, Traits, Allocator> & hm) 
{ 
    vector<Key> keys; 

    // If C++11 'auto' is not available in your C++ compiler, use: 
    // 
    // typename hash_map<Key, Type, Traits, Allocator>::const_iterator it; 
    // for (it = hm.begin(); ...) 
    // 
    for (auto it = hm.begin(); it != hm.end(); ++it) 
    { 
     keys.push_back(it->first); 
    } 

    return keys;   
} 
Questions connexes