【发布时间】:2017-01-27 09:27:07
【问题描述】:
我知道标准库有std::reverse_iterator<...>,给定一个迭代器类型,可以用来获取它的反向(类型)。
它是否也有类似的机制来反转用于排序/排序的比较器?采用比较器类型并产生与相反顺序相对应的比较器的东西(假设顺序是可逆的)?例如
std::reverse_comparator<std::greater<int>> 等同于 std::less<int>?
【问题讨论】:
-
std::reverse_comparator<std::greater<int>>应该是std::less_equal<int>,不是吗? -
@EdgarRokyan:不,我不这么认为。否则为什么要用
std::less而不是std::less_equal作为原始比较器? -
@einpoklum 我同意埃德加的观点。如果您的比较器反转的目的是全面反转,即所有真实的现在都是虚假的,而所有虚假的现在都是真实的,那么埃德加是完全正确的。
std::greater严格更大。与此相反,所有不严格大于,即所有小于或相等。 -
@WhozCraig:查看我的编辑。我对您将用于排序的内容感兴趣;也许这让我更清楚为什么我不只想要
return not original_comparator(x,y);。 -
@einpoklum 我明白了。要颠倒顺序,您希望倒置的比较器能够实现这一点。虽然这在高层次上是有道理的,但埃德加的观点(我认为)只是我放大的。在处理需要严格弱排序的事情时,反转比较器并非易事。对于您的问题,我不认为 std lib 提供了这样的东西,尽管构建一个特定于您的反转需求的东西似乎是一项相当微不足道的任务。
标签: c++ templates iterator comparator c++-standard-library