Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何将min_by_key或max_by_key与迭代期间创建的值的引用一起使用?_Rust - Fatal编程技术网

Rust 如何将min_by_key或max_by_key与迭代期间创建的值的引用一起使用?

Rust 如何将min_by_key或max_by_key与迭代期间创建的值的引用一起使用?,rust,Rust,我有一个迭代器,它可以映射一些值,同时创建元组。我需要通过元组上的一个元素(不是Copy)获得最大值,但内部引用正在阻碍(如图所示) 我怎样才能做这样的工作 // Not a Copy type! #[derive(Ord, PartialOrd, Eq, PartialEq)] struct t(i8); fn main() { // This works let v = vec![(t(0),), (t(1),)]; v.iter().min_by_key(|v|

我有一个迭代器,它可以映射一些值,同时创建元组。我需要通过元组上的一个元素(不是
Copy
)获得最大值,但内部引用正在阻碍(如图所示)

我怎样才能做这样的工作

// Not a Copy type!
#[derive(Ord, PartialOrd, Eq, PartialEq)]
struct t(i8);

fn main() {
    // This works
    let v = vec![(t(0),), (t(1),)];
    v.iter().min_by_key(|v| &v.0);

    // This doesn't
    let v = vec![0, 1];
    v.iter().map(|i| (t(*i),)).min_by_key(|v| &v.0);
}

错误[E0495]:由于需求冲突,无法推断借用表达式的适当生存期
-->src/main.rs:12:47
|
12 | v.iter().map(| i |(t(*i)).min|u by|u键(|v|和v.0);
|                                               ^^^^
|
注意:首先,生命周期不能超过12:43在身体上定义的匿名生命周期#2。。。
-->src/main.rs:12:43
|
12 | v.iter().map(| i |(t(*i)).min|u by|u键(|v|和v.0);
|                                           ^^^^^^^^
注意:…这样引用就不会超过借用的内容
-->src/main.rs:12:47
|
12 | v.iter().map(| i |(t(*i)).min|u by|u键(|v|和v.0);
|                                               ^^^^
注意:但是,生命周期必须在12:5对方法调用有效。。。
-->src/main.rs:12:5
|
12 | v.iter().map(| i |(t(*i)).min|u by|u键(|v|和v.0);
|     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
注意:…因此类型/生存期参数在这里的作用域中
-->src/main.rs:12:5
|
12 | v.iter().map(| i |(t(*i)).min|u by|u键(|v|和v.0);
|     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

他们不能。当值流经迭代器适配器时,它们会被移动。移动值会导致对该值的任何引用无效。您正试图引用一个仅存在于迭代器管道中的值;该引用不能存活足够长的时间。这相当于这个基本示例:

(0..9).map(|x| &x)
您需要使用:

这是因为闭包返回的值是一个
排序
,没有对原始值的引用

v.iter().map(|i| (X(*i),)).min_by(|a, b| a.0.cmp(&b.0));