Есть ли простой способ реализовать черту `Ord` для пары ключ-значение, порядок которой определяется только ее ключом? - PullRequest
0 голосов
/ 02 мая 2019

Я хочу реализовать структуру данных KeyValuePair<K, V>, которая реализует Ord, если K реализует Ord. В настоящее время это моя реализация:

use std::cmp::Ordering;

struct KeyValuePair<K, V> {
    key: K,
    value: V,
}

impl<K: PartialEq, V> PartialEq for KeyValuePair<K, V> {
    fn eq(&self, other: &Self) -> bool {
        self.key.eq(&other.key)
    }
}

impl<K: Eq, V> Eq for KeyValuePair<K, V> {}

impl<K: PartialOrd, V> PartialOrd for KeyValuePair<K, V> {
    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
        self.key.partial_cmp(&other.key)
    }
}

impl<K: Ord, V> Ord for KeyValuePair<K, V> {
    fn cmp(&self, other: &Self) -> Ordering {
        self.key.cmp(&other.key)
    }
}

Кроме Ord, я также должен реализовать PartialEq, Eq и PartialOrd, что слишком много. Я не хочу использовать #[derive], потому что это будет также сравнивать value.

Так есть ли способ, которым я могу упростить свой код?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...