gpt4 book ai didi

rust - 如何为给定类型选择不同的 std::cmp::Ord(或其他特征)实现?

转载 作者:行者123 更新时间:2023-11-29 07:55:29 26 4
gpt4 key购买 nike

我正在尝试将 std::collections::BinaryHeap 与自定义结构一起使用。为此,我必须让我的结构实现 std::cmp::Ord 特性,但我需要的是相同结构的 2 个 BinaryHeap 但顺序不同。

有没有一种方法可以定义 2 个 Ord 实现并选择使用哪个 Ord,或者其他一些方法来指定替代顺序?

我想我可以定义 2 个不同的包装结构,它们保留对原始自定义结构的引用,并为每个结构实现 Ord,但是必须构造一个潜在的许多此类包装结构的实例。

在 Pyhton/Java 中,我会提供一个排序函数/比较器,但似乎没有这样的工具。在 Scala 中,我可以定义一个仅编译时类型来选择正确的隐式排序实现;感觉 Rust 支持类似的东西,但我一直无法解决。

最佳答案

对于一个类型,不可能有相同特征的两种不同实现,例如这个假设的方案有效

struct MyType { ... }
mod foo {
impl Ord for MyType { ... } // A

// everything in here uses the A implementation
}
mod bar {
impl Ord for MyType { ... } // B

// everything in here uses the B implementation
}

如果您希望 BinaryHeap 有不同的行为,您必须只使用包装类型,但是,包装类型并不浪费,因为没有额外的间接寻址或内存使用,struct Foo { data: T T 是相同的,除了标称类型名称(无论 T 是什么类型)。

关于rust - 如何为给定类型选择不同的 std::cmp::Ord(或其他特征)实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28778547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com