【问题标题】:Is there a particular reason the less than operator is used as default comparison for max pq?是否有特殊原因将小于运算符用作 max pq 的默认比较?
【发布时间】:2018-11-25 16:56:45
【问题描述】:

为什么不能使用较大的运算符作为比较?使用小于有什么特别的优势吗?

【问题讨论】:

  • 所有其他 STL 工具使用小于。因此,编写了许多实现operator< 但不一定实现operator> 的类。如果priority_queue 不一致,那么如果没有额外的工作,它将无法用于此类类。所以基本上,它是为了最小化用户为了使用库而需要提供的界面的大小。
  • 技术上没有优势。这只是为了一致性。此外,排序的最低要求是由一些排序关系定义的,STL选择了一些'form of'运算符
  • 如果您想为所有运营商提供平等机会,请查看 boost 类模板 boost::less_than_comparablestackoverflow.com/questions/4589353/…
  • 只要运营商实施/实施严格的弱排序,std::lessstd::greater 都可以是默认值。但是,你必须选择一个,而且大多数时候看起来更自然,所以这是一个理智的默认设置。如果需要,您可以随时覆盖它。

标签: c++ stl priority-queue


【解决方案1】:

您的问题有两个方面:

  • 首先,这在技术上是不正确的:大多数算法(不确定您指的是哪一个)默认使用std::less。但是,可以覆盖该默认值。重要的一点是比较的行为,即它强加了“严格-弱排序”,您会在许多关于该主题的文本中提到这个术语,(我相信)甚至是标准本身。
  • 其次,升序处理通常是“自然的”,并且是整个 C++ 标准库的默认设置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 2011-01-16
    • 2011-08-20
    • 2012-11-29
    • 2011-08-03
    • 2014-07-31
    • 1970-01-01
    相关资源
    最近更新 更多