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