使用转换翻转地图,接收错误"输入int unexpected"

时间:2017-08-09 14:05:14

标签: c++

我有以下代码,其中包括翻转我从此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>);

}

1 个答案:

答案 0 :(得分:3)

您应该写flip_pair而不是flip_pair<int, double>

std::transform(s.begin(), s.end(),
    std::inserter(dst, dst.begin()), flip_pair);
涉及模板时可能会使用

flip_pair<int, double>语法,但在您的示例中,它们不是。

请注意,另一个选项(如果您只在一个地方需要flip_pair功能)是简单地使用 lambda

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);
    });