2017-08-09 4 views
0

次のコードがあります。このコードは、questionから取得したマップを反転しています。コンパイラは、 'int'型が 'flip_pair < int、double >'という引数で予期しないコード行の最後の行にエラーを返します。私はこれについて混乱しています - 型はflip_pair関数にとって正しいと思われるので、より根本的な何かを欠いている必要があるように感じます。何かアドバイスありがとうございます。変換を使用してマップを反転すると、 "予期しないタイプの入力"

#include <iostream> 
#include <vector> 
#include <map> 
#include <algorithm> 
#include <iterator> 

std::pair<double,int> flip_pair(const std::pair<int, double> &p){ 
    return std::pair<double,int>(p.second,p.first); 
} 

int main(){ 

    std::map<int, double> s; 
    s[1] = 5.5; s[2] = 3.2; 

    std::multimap<double,int> dst; 
    std::transform(s.begin(), s.end(), 
     std::inserter(dst, dst.begin()),flip_pair<int, double>); 

} 

答えて

3

代わりflip_pair<int, double>flip_pairを書く必要があります:テンプレートが含まれる場合

std::transform(s.begin(), s.end(), 
    std::inserter(dst, dst.begin()), flip_pair); 

flip_pair<int, double>構文が使用されるかもしれませんが、あなたの例ではそうではありません。

注意、別のオプションは、(あなたが唯一の1つの場所でflip_pair機能が必要な場合は)単にラムダ代わりに使用することを:もちろん

std::transform(std::cbegin(s), std::cend(s), 
    std::inserter(dst, std::begin(dst)), [](const auto& e) { 
     return std::make_pair(e.second, e.first); 
    }); 
+0

を!私は[std :: transform](http://www.cplusplus.com/reference/algorithm/transform/)のこのリソースからそれを覚えていたはずですが、私はそれを逃しました。ありがとうございました!! – wobertson

関連する問題