gpt4 book ai didi

rust - 当比较依赖于数据而不是被比较项目的一部分时,如何实现 Ord?

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

我有一个只包含 i32 的小结构:

struct MyStruct {
value: i32,
}

我想实现 Ord 以便将 MyStruct 存储在 BTreeMap 或任何其他需要您拥有 的数据结构中在其元素上排序

在我的例子中,比较 MyStruct 的两个实例并不依赖于它们中的 value,而是询问另一个数据结构(字典),以及那个数据结构对于我将创建的 BTreeMap 的每个实例都是唯一的。所以理想情况下它看起来像这样:

impl Ord for MyStruct {
fn cmp(&self, other: &Self, dict: &Dictionary) -> Ordering {
dict.lookup(self.value).cmp(dict.lookup(other.value))
}
}

但是这是不可能的,因为 Ord 实现只能访问 MyStruct 的两个实例,仅此而已。

一个解决方案是在 MyStruct 中存储一个指向字典的指针,但那太过分了。 MyStruct 应该是一个简单的包装器,指针会加倍其大小。另一种解决方案是使用静态全局,但这也不是一个好的解决方案。

在 C++ 中,解决方案很简单:大多数 STL 算法/数据结构都允许您传递一个比较器,它可以是具有某种状态的函数对象。所以我相信 Rust 会有一个成语来以某种方式匹配它,有什么办法可以做到这一点吗?

最佳答案

Rust(更具体地说是 Rust 的 libcollections)目前没有类似比较器的构造,因此使用可变静态可能是最好的选择。这也在 rustc 中使用,例如字符串内部是静态的。话虽如此,这种用例并不少见,所以也许如果我们申请它,Rust 总有一天会得到外部比较器。

关于rust - 当比较依赖于数据而不是被比较项目的一部分时,如何实现 Ord?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35786878/

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