1

key => valueマップを反転する必要があります ( value => key)。ただし、昇順/降順でソートするオプションが必要です。

多かれ少なかれ使っていると思います!

例えば:map<int, int, greater<int> > map

Sorting std::map using valueの投稿に基づいて、部分的な解決策があります...

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

4

2 に答える 2

2

最後のコード スニペットでほぼ完了しましたが、許可した Compare テンプレート タイプを使用するのを忘れていました。

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;
}
于 2013-09-11T14:34:00.040 に答える