1

からすべての 2 番目の要素をコピーする方法を教えてください。

map<string, string> myMap

deque<string> myDeq

ファンクターを作成せずに for_each または transform を使用します。この質問のように試しました

transform(myMap.begin(), myMap.end(), back_inserter(myDeq), mem_fun_ref(&map<string, string>::value_type::second)); 

しかし、それは私にとってはうまくいきませんでした-「このタイプの不正な使用」というエラーが発生しました。

4

1 に答える 1

0

エラーが発生する理由map<string, string>::value_type::secondは、メンバー関数ではないためです。これは、std::pair テンプレート構造体の単なるメンバー変数です。

ファンクターを使用しない解決策の 1 つは、ラムダを使用することです。しかし、これは C++11 の機能であるため、それが必要かどうかはわかりません。

次の例を見てください。

#include <iostream>
#include <map>
#include <deque>
#include <algorithm>
#include <string>
#include <iterator>

using namespace std;

int main()
{
    map<string,string> myMap;
    deque<string> myDeque;

    myMap["key1"]="value1";
    myMap["key2"]="value2";
    transform(myMap.begin(),myMap.end(),back_inserter(myDeque),[](map<string,string>::value_type p){return p.second;});

    copy(myDeque.begin(),myDeque.end(),ostream_iterator<string>(cout,"\n"));
}
于 2012-12-18T17:36:33.010 に答える