我见过一个类似的问题,但是没有人告诉我如何为结构实现Ord。例如,以下内容:
struct SomeNum {
name: String,
value: u32,
}
impl Ord for SomeNum {
fn cmp(&self, other:&Self) -> Ordering {
let size1 = self.value;
let size2 = other.value;
if size1 > size2 {
Ordering::Less
}
if size1 < size2 {
Ordering::Greater
}
Ordering::Equal
}
}
这给了我一个错误:
error: the trait `core::cmp::Eq` is not implemented for the type `SomeNum` [E0277]
我该怎么解决这个问题?我尝试将实现更改为:
impl Ord for SomeNum where SomeNum: PartialOrd + PartialEq + Eq {...}
并添加适当的partial_cmp
和eq
函数,但这给了我一个错误,即这两种方法都不是Ord
的成员。
Ord
的定义如下:
pub trait Ord: Eq + PartialOrd<Self> {
fn cmp(&self, other: &Self) -> Ordering;
}
任何实现Ord
的类型也必须实现Eq
和ParatalOrd
顺便说一句,您的实现看起来是错误的;如果
self。值是您要比较的全部,
self。价值
如果需要,您可以使用
u32上的
Ord
实现来提供帮助:self。价值cmp(其他.value)
。
您还应考虑到,
Ord
是一个总订单。例如,如果您的PartialEq
实现考虑了name
,则您的Ord
实现也必须考虑。为了方便起见,最好使用一个元组(表示比较中最重要的字段是值
,但如果它们相同,则应考虑名称
),如下所示:
struct SomeNum {
name: String,
value: u32,
}
impl Ord for SomeNum {
fn cmp(&self, other: &Self) -> Ordering {
(self.value, &self.name).cmp(&(other.value, &other.name))
}
}
impl PartialOrd for SomeNum {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl PartialEq for SomeNum {
fn eq(&self, other: &Self) -> bool {
(self.value, &self.name) == (other.value, &other.name)
}
}
impl Eq for SomeNum { }
如果您是这样做的,那么您最好对字段重新排序,并使用
#[派生]
:
#[derive(PartialEq, Eq, PartialOrd, Ord)]
struct SomeNum {
value: u32,
name: String,
}
这将扩展到基本相同的事情。
我想创建一个食谱网站,在那里你可以添加/修改/删除食谱,每个模型都应该有一个配料的列表,与所需的量的那个配料。 我试图使用这样的dict:,但结果是EF Core并不真正喜欢dicts的思想,所以我试图创建一个“映射器”模型,如下所示: 问题是,它仍然没有真正起作用。我不能添加菜谱,也不能删除,因为它进入了一个永远循环。 你将如何实施它? 谢谢
图的存储结构 图的存储结构除了要存储图中各个顶点的本身信息外,同时还要存储顶点与顶点之间的所有关系(边的信息),因此,图的结构比较复杂,很难以数据元素在存储区中的物理位置来表示元素之间的关系,但也正是由于其任意的特性,故物理表示方法很多。常用的图的存储结构有邻接矩阵、邻接表等。 邻接矩阵表示法 对于一个具有n个结点的图,可以使用n*n的矩阵(二维数组)来表示它们间的邻接关系。矩阵 A(i,j) =
栈简介 栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。 它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,
本文向大家介绍C#结构实现接口,包括了C#结构实现接口的使用技巧和注意事项,需要的朋友参考一下 示例
语法问题。 已有代码 想请问下,impl Display for Point<T> 正确写法是啥样的?
我正在尝试在C中实现MST的Prim算法。我有一个设计问题 我实现了一个min-heap,它需要一个整数,我们可以提取min、减少键和插入键。 现在,正如我在Prim的理解,我需要维护每个顶点的权重和邻居信息。我的一些想法是: 1]定义结构 使用min堆以最小权重返回节点。但是问题是减少键,因为对于减少键,调用者需要传递他想要减少键的顶点。由于堆交换元素的频率太高,我必须遍历整个列表以找到顶点,然