I need to flip a map (key => value
in value => key
). However, I want the option to sort in asc/desc order.
I think in using greater or less!
E.g.: map<int, int, greater<int> > map
Based on posting Sorting std::map using value, I have the partial solution ...
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;
}
How to add arguments to select greater or less?
I tried this but does not work!!
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;
}
Erro: error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11