gpt4 book ai didi

rust - 如何使用 BTreeSet 的自定义比较器函数?

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

在C++中,可以自定义代码std::set用于对其参数进行排序。默认情况下它使用 std::less , 但这可以用 Compare 改变模板参数。

Rust 的 BTreeSet使用 Ord对类型进行排序的特征。我不知道有什么方法可以覆盖此行为——它内置于容器存储的类型的类型约束中。

但是,构建一个按一些本地有用的指标排序的项目列表通常是有意义的,但这并不是始终比较项目的最佳方式。或者,假设我想对 used 类型的项目进行排序;在这种情况下,即使我想自己实现 Ord 也是不可能的。

解决方法当然是为项目构建一个普通的旧Vec,然后对其进行排序。但在我看来,这不如在插入时自动排序那么干净。

有没有办法对 Rust 的容器类型使用替代比较器?

最佳答案

Rust 标准集合中目前不存在自定义比较器。解决这个问题的惯用方法是定义一个 newtype :

struct Wrapper(Wrapped);

然后您可以定义自定义 Ord Wrapper 的实现完全符合您想要的语义。

此外,既然你有了一个newtype,你还可以很容易地实现其他traits来促进转换:

请注意,访问包装实体在语法上是轻量级的,因为它只有两个字符:.0 .

关于rust - 如何使用 BTreeSet 的自定义比较器函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34028324/

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