std::map から要素を Vector に取得: ファンクターを超えて
std::map からキーまたは値を抽出するには、次のようにします。提供されたコード スニペットに示されているように、本能的にファンクターを使用します。
struct RetrieveKey { template <typename T> typename T::first_type operator()(T keyValuePair) const { return keyValuePair.first; } }; map<int, int> m; vector<int> keys; transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey());
whileこのアプローチは技術的には機能しますが、コードの難読化とターゲットからの実行距離に悩まされます。
代替方法: 反復子ループ
より単純な解決策には、マップのイテレータ:
for (map<int, int>::iterator it = m.begin(); it != m.end(); ++it) { keys.push_back(it->first); }
このメソッドは、明確な読みやすさと、代わりに値を取得するための簡単な変更を提供します。
Boost ライブラリのアプローチ
Boost ライブラリを使用する場合は、さらに簡素化するために BOOST_FOREACH を使用できます。
pair<int, int> me; // map element type vector<int> v; BOOST_FOREACH(me, m) { v.push_back(me.first); }
このアプローチでは、以下が提供されます。
要約すると、ファンクターメソッドは有効なオプションとしては、反復子ループとブースト ライブラリのアプローチにより、要素を std::map からベクトルに取得するためのよりシンプルで直感的な方法が提供されます。
以上がキーまたは値を std::map から Vector に効率的に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。