查找泛型类型T的最大允许值

Erl*_*ch 5 rust

我正在实现一个合并排序,它将对一个类型的数组进行排序T.在我的merge方法中,算法要求左右列表的最后一个元素为正无穷大.如何获得给定数据类型可以容纳的最大值?

fn merge<T: PartialOrd + Copy + std::fmt::Debug>(p: usize, q: usize, r: usize, array: &mut Vec<T>) {
    let left_size: usize = q - p;
    let right_size: usize = r - q;

    let mut left: Vec<T> = Vec::new();
    let mut right: Vec<T> = Vec::new();

    for i in 0..left_size {
        left.push(array[p + i]);
    }

    for i in 0..right_size {
        right.push(array[q + i]);
    }

    left.push(T::max_value()); //where I would put the max value
    right.push(T::max_value()); //where I would put the max value

    let mut i: usize = 0;
    let mut j: usize = 0;

    for k in p..r {
        if left[i] <= right[j] {
            array[k] = left[i];
            i += 1;
        } else {
            array[k] = right[j];
            j += 1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sta*_*iff 5

据我所知,目前标准库无法做到这一点。解决它的一种方法是创建您自己的 trait,添加另一个绑定到merge的 trait 并为您期望的类型实现您的 trait。

对于其他类型,特定的 trait 实现u32将返回std::u32::MAX,依此类推。

这是今年早些时候的一次讨论

正如oli_obk-ker下面指出的那样,num板条箱已经具有这样的特征:Bounded.