greater/less C++ 中的函数对象
greater/less function objects in C++
我已经浏览了更多、更少的函数对象文档。虽然我确实有点了解其中的内容,但我还不明白。将按升序或降序对我的容器使用更大的排序吗?我特别困惑,因为以下两行似乎在做相反的事情。
std::priority_queue<int, std::vector<int>, std::greater<int> > q2;
for(int n : {1,8,5,6,3,4,0,9,7,2})
q2.push(n);
print_queue(p2);
这会打印 0、1、2、3、4、5、6、7、8、9。但是,
int x[10] = { 1,3,5,7,9,2,4,6,8,10 };
std::sort(x,x+10,std::greater<int>());
打印这个会得到 10, 9, 8, 7, 6, 5, 4, 3, 2, 1。
如果有人能在我的示例中描述 'greater' 的工作原理,而不是仅仅说明 'greater' 的一般工作原理,那就太好了。
它将按升序排列,您将始终弹出队列中最小的元素。优先队列按照给定的顺序关系反向排序。
默认模板定义如下所示:
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
它应用 less<>()(lhs, rhs)
来获得 "biggest" rhs 元素。但在您的情况下,它将应用 greater<>()(lhs, rhs)
来获取 "biggest" rhs 元素(这当然是最小的)。
另一方面,std::sort
会保留您给它的订单类型。所以 std::less
将按升序排序,std::greater
将按降序排序。
std::greater<int>
反转整数的排序顺序。
std::priority_queue
dequeues the next largest element by default,所以通过使用 std::greater<int>
你正在反转它所以它出列下一个最小的元素。
同样,std::sort
默认情况下将按升序对元素进行排序,但如果使用 std::greater<int>
,您将看到降序排序。
我已经浏览了更多、更少的函数对象文档。虽然我确实有点了解其中的内容,但我还不明白。将按升序或降序对我的容器使用更大的排序吗?我特别困惑,因为以下两行似乎在做相反的事情。
std::priority_queue<int, std::vector<int>, std::greater<int> > q2;
for(int n : {1,8,5,6,3,4,0,9,7,2})
q2.push(n);
print_queue(p2);
这会打印 0、1、2、3、4、5、6、7、8、9。但是,
int x[10] = { 1,3,5,7,9,2,4,6,8,10 };
std::sort(x,x+10,std::greater<int>());
打印这个会得到 10, 9, 8, 7, 6, 5, 4, 3, 2, 1。
如果有人能在我的示例中描述 'greater' 的工作原理,而不是仅仅说明 'greater' 的一般工作原理,那就太好了。
它将按升序排列,您将始终弹出队列中最小的元素。优先队列按照给定的顺序关系反向排序。
默认模板定义如下所示:
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
它应用 less<>()(lhs, rhs)
来获得 "biggest" rhs 元素。但在您的情况下,它将应用 greater<>()(lhs, rhs)
来获取 "biggest" rhs 元素(这当然是最小的)。
std::sort
会保留您给它的订单类型。所以 std::less
将按升序排序,std::greater
将按降序排序。
std::greater<int>
反转整数的排序顺序。
std::priority_queue
dequeues the next largest element by default,所以通过使用 std::greater<int>
你正在反转它所以它出列下一个最小的元素。
同样,std::sort
默认情况下将按升序对元素进行排序,但如果使用 std::greater<int>
,您将看到降序排序。