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)文档中关于实现必须如何运行的指导原则。