【发布时间】:2020-04-01 07:55:55
【问题描述】:
如何检查vector_a 的所有元素是否也以与vector_b 相同的顺序出现?
vector_b 可能很长,不假设它已排序,但它没有重复元素。
我找不到为Vec 或在 itertools 中实现的方法,所以我尝试通过以下方式实现:
- 从
vector_b映射value -> index创建一个hashmap - 遍历
vector_b并检查:- 元素存在于 hashmap 中
- 索引严格大于前一个元素的索引
我对此并不满意,因为由于创建了 hashmap,空间效率不高。
【问题讨论】:
-
您可以简单地在
vector_b中对vector_a的第一个元素进行线性搜索。找到后,搜索下一个,依此类推。由于vector_b没有重复项,因此您永远不需要再次备份,因此这在vector_b的长度上是线性的,只需要恒定的额外空间。 -
一个简单的可能优化是,一旦
vector_a中的剩余元素多于vector_b中的剩余元素,则退出循环,因为这样就不可能再找到所有元素了。 -
这是否需要对向量元素是通用的,还是元素是特定类型?
-
@PeterHall 元素是派生自
Copy、Eq和PartialEq的另一个结构。 -
@SvenMarnach 是的,感谢您的建议。我可以做这个。您会推荐这种方法:doc.rust-lang.org/std/iter/trait.Iterator.html#method.position 进行搜索吗?我的疑问是,对于未排序的
vector_b,搜索可能会以非常低效的 WRT 时间结束?