使用变换翻转地图,接收错误"type int unexpected"

Flipping a map using transform, receiving error "type int unexpected"

本文关键字:错误 type int unexpected 变换 翻转 地图      更新时间:2023-10-16

我有以下代码,其中包括翻转我从这个问题中获取的地图。编译器为最后一行代码返回错误,指出参数"flip_pair<int,double>"中的"int"类型是意外的。我对此感到困惑 - 该类型似乎适用于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>);
}

你应该写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);
});