ホームページ >バックエンド開発 >C++ >std::map からキーと値を効率的に抽出してベクターにするにはどうすればよいですか?

std::map からキーと値を効率的に抽出してベクターにするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-29 20:30:11605ブラウズ

How to Efficiently Extract Keys and Values from a std::map into Vectors?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。