1. ホーム
  2. c++

[解決済み] STLでマップの値をベクターにコピーする [重複]。

2023-02-05 21:14:12

質問

現在、Effective STLを読み進めています。項目5では、通常、単一要素の対応するものよりも範囲メンバ関数を使用することが望ましいと示唆しています。私は現在、マップ内のすべての値(つまり、私はキーを必要としない)をベクトルにコピーしたいと考えています。

これを行うための最もきれいな方法は何ですか?

どのように解決するのですか?

mapから得られるイテレータはstd::pairを参照し、vectorに挿入するために使用するイテレータはvectorに格納された型のオブジェクトを参照し、(キーを破棄している場合)pairではないので、ここで簡単に範囲を使用することはできません。

私は本当に、明白なことよりもずっときれいになるとは思いません。

#include <map>
#include <vector>
#include <string>
using namespace std;

int main() {
    typedef map <string, int> MapType;
    MapType m;  
    vector <int> v;

    // populate map somehow

    for( MapType::iterator it = m.begin(); it != m.end(); ++it ) {
        v.push_back( it->second );
    }
}

というのは、もしこれを何度も使うのであれば、テンプレート関数として書き直すでしょう。こんな感じ。

template <typename M, typename V> 
void MapToVec( const  M & m, V & v ) {
    for( typename M::const_iterator it = m.begin(); it != m.end(); ++it ) {
        v.push_back( it->second );
    }
}