Serialization 如何使用没有';是否在BTreeMap中实现PartialOrd/Ord?

Serialization 如何使用没有';是否在BTreeMap中实现PartialOrd/Ord?,serialization,rust,traits,serde,Serialization,Rust,Traits,Serde,有一个第三方类型T,它不实现Ord 我需要一个映射,带有T类型的键,它具有确定性序列化 对于其他类型,我只使用BTreeMap,其中X实现PartialOrd和Ord 我无法为t执行PartialOrd和Ord,因为t未在我的机箱中定义 如何使用确定性序列化从T映射到Y?可以比较T值,但是T恰好没有实现Ord,您可以定义一个实现Ord的新类型结构键(T),并将其用作映射键。T是否至少实现了Eq?因为如果不是的话,你可能就不走运了。@user4815162342谢谢,新类型似乎是短期内唯一的解决方

有一个第三方类型
T
,它不实现Ord

我需要一个映射,带有
T
类型的键,它具有确定性序列化

对于其他类型,我只使用
BTreeMap
,其中
X
实现
PartialOrd
Ord

我无法为
t
执行
PartialOrd
Ord
,因为
t
未在我的机箱中定义


如何使用确定性序列化从
T
映射到
Y

可以比较
T
值,但是
T
恰好没有实现
Ord
,您可以定义一个实现
Ord
的新类型
结构键(T)
,并将其用作映射键。
T
是否至少实现了
Eq
?因为如果不是的话,你可能就不走运了。@user4815162342谢谢,新类型似乎是短期内唯一的解决方案。新类型解决方案也是惯用的方法,在其他同等情况下,你通常会使用它。需要记住的是,与大多数基于gc的语言不同,像newtype这样的简单封装没有运行时成本。假设发布版本,
T
值在内存中具有完全相同的表示形式,并访问
k.0。某些字段
将生成与访问
T.some\u字段
完全相同的程序集。你可能已经知道这一切,所以不要把这当作我在光顾你,但是有gc'ed语言背景的人并不觉得这很明显。要知道,你为
Key
编写的
Ord
实现必须仍然是一个完整的顺序,不管包含的
t
s。如果不正确地执行
Ord
,则
BTreeMap
可能无法正常工作(返回给定键的错误值、找不到或插入键的值、内存泄漏等)。即使未使用
不安全的
(逻辑错误不是内存不安全的)。因此,请确保遵守《作战需求文件》(Ord)文档中关于实现必须如何运行的指导原则。