我有一个向量,RTSPUrl
我想找到最小的项目。
struct RTSPUrl { /* fields omitted */ }
fn main() {
let rtsp_urls = std::vec::Vec::<RTSPUrl>::new();
let minimum_element = rtsp_urls.iter().min();
}
但是编译器抱怨RTSPUrl
应该执行Ord
。
error[E0277]: the trait bound `RTSPUrl: std::cmp::Ord` is not satisfied
--> src/main.rs:5:44
|
5 | let minimum_element = rtsp_urls.iter().min();
| ^^^ the trait `std::cmp::Ord` is not implemented for `RTSPUrl`
|
= note: required because of the requirements on the impl of `std::cmp::Ord` for `&RTSPUrl`
但是这种类型不是由我的板条箱产生的,而是由protobuf产生的。我还能做其他事情吗?
您可以min_by
自己使用和实现订购:
let minimum_element = rtsp_urls.iter().min_by(|a, b| {
// return an Ordering based on a and b
Ordering::Equal
});
或者,如果你只是通过一些属性排序RTSPUrl
是不实现Ord
,你可以使用min_by_key
:
let minimum_element = rtsp_urls.iter().min_by_key(|url| {
// return something that implements Ord based on url
url.something()
});
您没有指定RTSPUrl
外观或排序方式,但是这些选项之一应该起作用。链接到游乐场。
相同的模式(*_by()
和*_by_key()
)用于其他地方,例如max
或slice.sort
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句