2012-01-15 10 views
2

STL hash_mapからすべてのキーを取得する方法はありますか?あるいは、私はsetやhash_setのようなものを挿入前に記録する必要がありますか?STL hash_mapからすべてのキーを取得するには?

+0

注意必要がない場合は、すべての提案された解決策ではキーは、罰金である(なぜ順番順不同であることを?)注文が必要な場合は、結果を 'ソートする '必要があります –

答えて

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

私はあなたが" iter.first " –

4

hash_mapを単に繰り返します。反復ごとにiter->firstがキーです。イゴールOKS'と答えた上

4

ビル:

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

あなたはhash_mapを反復処理したい、と現在のイテレータ値が指すペアから最初の要素を抽出してもよい(ペアの最初の要素が実際にありますかぎ)。

// 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 
} 

これはベクトルにhash_mapから鍵を抽出することが可能機能です:

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;   
} 
関連する問題