堆中的次要顺序::简单
如何在 Perl 中定义 Heap::Simple 接口的二级排序?
How do I define a secondary ordering to the Heap::Simple interface in Perl?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
如何在 Perl 中定义 Heap::Simple 接口的二级排序?
How do I define a secondary ordering to the Heap::Simple interface in Perl?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
文档指出构造函数采用代码引用来定义
顺序,因此您可以指定您喜欢的任何排序方法:
通过“二次排序”,我假设您的意思是使用第二次比较,如果
第一个显示值相等。假设第一个比较是
通过“method1”方法找到的值,第二个比较是
来自“方法2”的值。因此,如果通过 method1 得到的值不同,则返回
结果,否则回退到 method2:
如果 method1 和 method2 返回字符串而不是数值,只需使用
cmp
运算符而不是<=>
。你可以使用任何你喜欢的东西,只要因为运算符返回正确的值。大多数排序函数喜欢使用
值 -1、0 和 1 指示 value1 是否小于、等于或
大于 value2,但此模块喜欢 1 表示 val1 < val2,所以之后
收集 -1, 0, 1 结果,如果结果为 -1,则返回 1(其中
值 1 小于值 2)。
The documentation states that the constructor takes a code reference to define
the order, so you can specify any sort method you like:
By "secondary ordering" I assume you mean that a second comparison is used if
the first one shows the values to be equal. Let's say the first comparison is
of values found via the "method1" method, and the second comparison is of
values from "method2". So, if by method1 the values are different, return
that result, and otherwise fall back to method2:
If method1 and method2 return strings instead of numeric values, simply use
the
cmp
operator instead of<=>
. You can use anything you like, as longas the operator returns the right values. Most sort functions like using the
values -1, 0 and 1 to indicate whether value1 is less than, equal to, or
greater than value2, but this module likes 1 to mean val1 < val2, so after
gathering the -1, 0, 1 result, one then returns 1 if the result is -1 (where
value1 is less than value2).
首先,编写一个函数,它接受两个要放入堆中的对象,如果第一个对象小于第二个对象,则返回 true 值,否则返回 false 值。
然后将其作为代码引用提供给 Heap::Simple。
Heap::Simple 文档中的示例如下:
First of all, you write a function that takes two of the objects you want to put in the heap, and returns a true value if the first one is smaller than the second, and false otherwise.
Then supply that as a coderef to Heap::Simple.
The example from the Heap::Simple docs is as follows: