gpt4 book ai didi

rust - BinaryHeap 是仅将 PartialEq 用于排序顺序还是用于真正的等价?

转载 作者:行者123 更新时间:2023-12-03 11:39:24 26 4
gpt4 key购买 nike

我要存储 MyStructBinaryHeap使用我自己的订购标准。我必须实现 OrdPartialEq ,但是堆会使用 PartialEq仅用于订购或它也将使用它来决定MyStruct实例 1 和 MyStruct实例 2 在逻辑上是同一个对象,因此可以在我背后晃来晃去吗?
例如,它是否可以决定“接下来是 inst2 但我已经在某个缓存中有 inst1,所以我将再次返回它”?
我的实例是非常不同的对象 - 它们只是具有相同的排序键。
我有这个代码。是不是因为我的 Eq实现只比较我想要排序的东西?我想将这些对象放入 BinaryHeap .在我当前的代码中,我将它们放在 Vec 中并在每个次优插入后排序。

type TQIFunc = fn() -> ();

struct TimerQueueItem {
when: Instant, // when it should run
name: String, // for trace only
what: TQIFunc, // what to run
}

impl Ord for TimerQueueItem {
fn cmp(&self, other: &TimerQueueItem) -> Ordering {
other.when.cmp(&self.when)
}
}

// `PartialOrd` needs to be implemented as well.
impl PartialOrd for TimerQueueItem {
fn partial_cmp(&self, other: &TimerQueueItem) -> Option<Ordering> {
Some(self.cmp(other))
}
}

impl PartialEq for TimerQueueItem {
fn eq(&self, other: &Self) -> bool {
self.when == other.when
}
}

impl Eq for TimerQueueItem {}
TQI1等于 TQI2如果他们有相同的 when值 - 实际上我只想按 when 排序值(value)。
请问 BinaryHeap对两件事相等做其他假设还是仅用于排序?我同意代码今天所做的并不是作为答案的基础;我主要关心的是 BinaryHeap不认为 TQI1TQI2 的逻辑克隆因为我断言他们是平等的。

最佳答案

docs for BinaryHeap 声明它是:“用二进制堆实现的优先级队列”。优先级队列的全部意义在于您可以插入具有相同优先级的不同项目并将相同的项目取回。因此,在您的情况下,您可以拥有多个具有相同 when 的项目。 value 并且它们仍然是队列中的不同项目。您也可以将完全相同的项目两次放入队列中,您将获得与放入的次数相同的次数。
您唯一不能保证的是:如果您插入多个比较相等的项目,则无法保证您取回它们的顺序。

关于rust - BinaryHeap 是仅将 PartialEq 用于排序顺序还是用于真正的等价?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63237566/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com