Привет,
Я сделал обёртку над парой (string, i32)
и переопределяю Qrd
и получаю неожиданный результат:
use std::collections::BinaryHeap;
use std::cmp::Ordering;
#[derive(Copy, Clone, PartialEq, Eq, PartialOrd, Debug)]
struct Q<'a>(&'a str, i32);
impl<'a> Ord for Q<'a> {
fn cmp(&self, other: &Self) -> Ordering {
self.1.cmp(&other.1).reverse() // NOTE reverse() here
}
}
fn main() {
let mut pq = BinaryHeap::new();
pq.push(Q("Apples", 5));
pq.push(Q("Bananas", 8));
pq.push(Q("Strawberries", 23));
// but the assertion fails!
assert_eq!(pq.peek(), Some(&Q("Apples", 5)));
}
Assert фейлится, хотя reverse()
явно намекает на обратное.
Что я делаю не так? (Playpen goes here)
UPD: действительно включил reverse()