使用更大或更少翻转地图
Flip map using greater or less
我需要翻转地图(key => value
value => key
)。但是,我希望该选项按 asc/desc 顺序排序。
我认为使用或多或少!
例如:map<int, int, greater<int> > map
基于发布排序标准::地图使用值,我有部分解决方案...
template<typename A, typename B>
pair<B, A> flipPair(const pair<A, B> &p) {
return pair<B,A>(p.second, p.first);
}
template<typename A, typename B>
map<B, A> flipMap(const map<A, B> &src) {
map<B, A> dst;
transform(src.begin(), src.end(), inserter(dst, dst.begin()), flipPair<A, B>);
return dst;
}
如何添加参数以选择更大或更少?
我试过这个,但不起作用!!
template<typename A, typename B, typename Comp = less<A> >
map<B, A, Comp> flipMap(const map<A, B> &src) {
map<B, A, Comp> dst;
transform(src.begin(), src.end(), inserter(dst, dst.begin()), flipPair<A, B>);
return dst;
}
埃罗: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11
你几乎用最后一个代码片段来拥有它,你只是忘记使用你允许的比较模板类型。
template<typename A, typename B, typename Compare = less<A> >
map<B, A, Compare> flipMap(const map<A, B> &src)
{
map<B, A, Compare> dst;
transform(src.begin(), src.end(), inserter(dst, dst.begin()), flipPair<A, B>);
return dst;
}
您需要允许使用自定义比较器。 std::map
根据被告知使用的比较器对密钥进行排序。默认情况下,它是 std::less
,而 operator <
又使用 作为密钥类型。为了使用其他比较器,您可以将其添加到函数的参数列表中,并在新map
的构造函数中指定它:
template<typename A, typename B, typename Comp = std::less<B> >
map<B, A, Comp> flipMap(const map<A, B> &src, const Comp& comp = Comp()) {
map<B, A> dst(comp);
transform(src.begin(), src.end(), inserter(dst, dst.begin()), flipPair<A, B>);
return dst;
}
这种方式提供了合理的默认行为,并允许在必要时通过比较器进行任意定制。要获得相反的顺序,请使用std::greater
作为比较器:
std::map<B, A> flippedDesc = flipMap(original, std::greater<B>());
注意:由于默认函数模板参数,上面的代码是 C++11。只要删除= std::less<B>
,您仍然可以将其与 C++03 一起使用,并且每次都明确指定函数对象/比较器类型。
相关文章:
- 为什么不;名字在地图上是按顺序排列的吗
- 基于多个条件处理地图中的所有元素
- 在C++中将矢量转换为嵌套地图
- 替换基于地图的所有引用
- 如何区分地图中的 0 和 false?
- 地图计数确实很重要,或者只是检查是否存在
- 如何从地图中删除矢量对象
- 是否有任何C++功能可以对地图进行排序?
- 如何使用 std::variant 打印地图键/值?
- 从矢量或地图中删除共享指针
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 无限嵌套具有变体的地图
- C++一会儿循环读到地图上 2 行?
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- 如何检查变量是否是C++中的地图?
- 如何使地图按值C++排序
- 修改地图内矢量中的值
- 为什么我在地图中搜索STL时差很大?
- 使用变换翻转地图,接收错误"type int unexpected"
- 使用更大或更少翻转地图