std::map から Vector へのキーまたは値の取得
std::map からのすべてのキーまたは値の取得Vector は一般的なタスクですが、std::map 自体にはこの目的のための明示的なメンバー関数がありません。 1 つのアプローチには、提供されたコードで示されているように、カスタム ファンクターの定義が含まれます。
struct RetrieveKey { template <typename T> typename T::first_type operator()(T keyValuePair) const { return keyValuePair.first; } }; map<int, int> m; vector<int> keys; // Retrieve all keys transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey()); // Dump all keys copy(keys.begin(), keys.end(), ostream_iterator<int>(cout, "\n"));
このソリューションはマップの外側でデータを操作しますが、場合によっては理想的ではない可能性があります。単純な for ループを利用した別のアプローチは、より明確で明示的なソリューションを提供します。
map<int, int> m; vector<int> key, value; for (auto it = m.begin(); it != m.end(); ++it) { key.push_back(it->first); value.push_back(it->second); cout << "Key: " << it->first << endl; cout << "Value: " << it->second << endl; }
このようにマップを反復処理することで、キーと値の両方を直接ベクトル コンテナに抽出できます。
Boost ライブラリを使用する場合の別のオプションは、プロセスをさらに簡素化します:
map<int,int> m; pair<int,int> me; // what a map<int, int> is made of vector<int> v; BOOST_FOREACH(me, m) { v.push_back(me.first); cout << me.first << "\n"; }
このバージョンは簡潔で読みやすく、取得プロセスを明示的に制御できます。最も適切な方法の選択は、開発者の特定のニーズと好みによって異なります。
以上がstd::map からキーと値を効率的に抽出してベクターにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。