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。
如果有人能够描述我的示例中"更大"的工作方式,而不仅仅是说"更大"是如何工作的,那将是很好的。
它将上升,您将始终弹出队列的最小元素。优先队列与给出的顺序关系相反。
默认模板定义如下:
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
它应用less<>()(lhs, rhs)
获取"最大" RHS元素。但是就您而言,它将应用greater<>()(lhs, rhs)
以获取"最大" RHS元素(当然是最小的)。
std::sort
保留了您给它的顺序类型。因此,std::less
将按升序排序,而std::greater
按降序排序。
std::greater<int>
倒置整数的排序。
std::priority_queue
默认情况下,下一个最大元素,因此,通过使用std::greater<int>
,您可以反转此元素,因此它取消了下一个最小的元素。
同样,默认情况下,std::sort
将按升序排序元素,但是通过使用std::greater<int>
,您会看到降序排序。
相关文章:
- 将带有派生模板的对象传递给接受具有基本模板的对象的功能
- 对象内部对象的重载功能
- 基于不同字段的对象向量的排序功能
- 具有小对象优化功能的智能指针
- 如果在创建对象时创建了 VPTR,那么为什么具有虚拟功能的类的大小在 32 位系统上为 4,在 64 位机器上为 8
- 如何改进我的"String"对象比较功能
- 如何存储指针以功能模板,该模板将可呼叫对象作为其参数之一
- GPU设备函数如何访问主机功能中定义的对象
- 如何将对象用作C 功能的参数
- 如何将指针分配给功能中的新对象,而不会使该对象在退出后消失
- 将对象传递到类,没有接收匹配功能错误
- 是否可以在辅助功能中概括对象类型
- 实现功能对象绑定而无需使用C 11
- 明智的选择是更喜欢lambdas功能对象
- 为什么不能将std :: stol转换为std ::功能对象
- 在不违反干prinicple的情况下,对传递功能对象的参数类型进行模板选择
- C 中的更大/较少功能对象
- 函子或功能对象的现实世界使用
- C++ 使用包含不同类型功能对象的基和派生类的 Reactor
- 如何在容器中存储具有不同签名的功能对象