首页 > 解决方案 > 为 Vec 实现一个特征对于各种数字 T

问题描述

我想有一个特点TopK如下:

pub trait TopK{
    pub fn top_k(&self, k : size) -> Result<Vec<usize>, io::Error>;
}

我想实现这样的行为将TopK取决于. 我对所有非浮点数有一种实现,对所有浮点数有另一种实现。Vec<T>T

因此,我想要以下内容:

impl<T> TopK for Vec<T> where T : num_traits::PrimInt + Copy {
//Implementation where T is any non-floating point number
}

impl<T> TopK for Vec<T> where T : num_traits::Float + Copy{
 //Implementation where T is any floating point number
}

这是因为浮点数只是部分排序的,所以对于浮点数,我必须为所有非 NaN 浮点数创建一个新结构,并在二进制堆中使用它们来进行 TopK 计算。

但是,尝试这样做会产生冲突的定义错误。这个问题要遵循的设计模式是什么?

标签: rust

解决方案


推荐阅读