其他分享
首页 > 其他分享> > c – 标准库是否有比较器反转机制?

c – 标准库是否有比较器反转机制?

作者:互联网

我知道标准库有std::reverse_iterator<...>,给定迭代器类型,它可以用来获得它的反向(类型).

它是否也有类似的机制来反转用于排序/排序的比较器?采用比较器类型并产生对应于相反顺序的比较器(假设顺序是可逆的)?例如
与std :: reverse_comparator< std :: greater< int>>等同于std :: less< int>?

解决方法:

C 17引入了std :: not_fn,它将“替换”std :: greater< int> by std :: less_equal< int>.

这不是std :: sort / std :: map的正确比较器.

另外在std中,我认为它不存在“转换”为std :: less< int>,但你可以轻松编写自己的东西,例如:

template <typename Comparer>
struct InvComparer
{
public:
    explicit InvComparer(Comparer comparer) : comp(comparer) {}
    template <typename T1, typename T2>
    bool operator() (const T1& lhs, const T2& rhs) const { return comp(rhs, lhs); };
private:
    Comparer comp;
};

Demo

标签:c,templates,comparator,iterator,c-standard-library
来源: https://codeday.me/bug/20190828/1754029.html