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

キーまたは値を std::map から Vector に効率的に抽出するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-28 06:33:10763ブラウズ

How to Efficiently Extract Keys or Values from a std::map into a Vector?

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

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