我想从ordered集合中找到第一个大于限制的元素。尽管迭代总是一个选择,但我需要一个更快的选择。目前,我想出了一个类似this的解决方案,但感觉有点不客气:
use std::collections::BTreeMap;
use std::cmp::Ordering;
use std::ops::Bound::{Included, Unbounded};
#[derive( Debug)]
struct FloatWrapper(f32);
impl Eq for FloatWrapper { }
impl PartialEq for FloatWrapper {
fn eq(&self, other: &Self) -> bool {
(self.0 - other.0).abs() < 1.17549435e-36f32
}
}
impl Ord for FloatWrapper {
fn cmp(&self, other: &Self) -> Ordering {
if (self.0 - other.0).abs() < 1.17549435e-36f32 {
Ordering::Equal
} else if self.0 - other.0 > 0.0 {
Ordering::Greater
} else if self.0 - other.0 < 0.0 {
Ordering::Less
} else {
Ordering::Equal
}
}
}
impl PartialOrd for FloatWrapper {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
浮点数包装不好,即使我确定不会有NaN]]
该范围也是不必要的,因为我想要一个元素。
您知道仅使用Rust的标准库来获得类似结果的更好方法吗?我知道有很多树实现,但是感觉有点过大了。
我想从有序集合中找到第一个大于限制的元素。尽管迭代总是一个选择,但我需要一个更快的选择。目前,我想出了一个解决方案...
现在我们已经过了,并澄清了一些要求,对您来说有两个坏消息: