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;
};
标签:c,templates,comparator,iterator,c-standard-library 来源: https://codeday.me/bug/20190828/1754029.html