Я хочу реализовать структуру данных 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
.
Так есть ли способ, которым я могу упростить свой код?