如果你有,Vec<u32>你会使用该slice::binary_search方法.
由于我不理解的原因,f32并且f64没有实施Ord.由于基本类型来自标准库,因此您无法Ord自己实现它们,因此您似乎无法使用此方法.
你怎么能有效地做到这一点?
我真的必须包装f64一个包装器结构并Ord在其上实现吗?这样做似乎非常痛苦,并且涉及大量transmute不安全地来回传播数据块,实际上是没有理由的.
我想Vec按照 Rust 中预定义的顺序对就地进行排序(重新排序)。
例如:
let i = vec![0, 3, 2, 1];
let mut v = vec!["a", "b", "c", "d"];
v.sort_by_indices(&i);
assert_eq!(v, &["a", "d", "c", "b"]);
Run Code Online (Sandbox Code Playgroud)
我想就地执行此操作。在我的用例中,v占用大量内存。
我正在根据两个标准对向量进行排序。第一个是浮点数NaN,第二个是字符串,用于按字典顺序断开关系。
vec.sort_by(|a, b| {
match (foo(a) as f64 / bar(a) as f64).partial_cmp(&(foo(b) as f64 / bar(b) as f64)) {
Some(x) => {
Ordering::Equal => name(a).cmp(name(b)),
other => other,
}
None() => {
//Not sure what to put here.
}
}
}
Run Code Online (Sandbox Code Playgroud)
foo(a)返回 int > 0,
bar(a)返回 int >= 0,
name(a)返回& String.
如何排序NaN,使其大于任何其他数字,并等于任何其他数字NaN(字典顺序决胜局)?