我有一个问题要问。让我们看一下下面的代码:
use std::collection::BTreeMap;
fn main() {
let mut hm: BTreeMap<String, String> = BTreeMap::new();
hm.insert("asdf".to_owned(), "zxcv".to_owned());
println!("{:?}", hm.get("asdf"));
}
因此,尽管BTreeMap
保留了String
s,但它接受了其他可以与密钥类型进行比较的类型。
但不只是Vec<T>
的情况。因此下面的代码是错误的:
fn main() {
let v: Vec<String> = vec!["hello".to_owned()];
println!("{:?}", v.binary_search("hello"));
}
这个代码段将无法编译,因为binary_search
调用对所提供值的完全相同类型的引用。我有点困惑为什么。
有人试图改变binary_search
的签名以支持接受该值的借用版本,但它破坏了东西并被拒绝。
事实上,我有点惊讶这没有被考虑作为一个新的版本。我猜binary_search_by
提供了一个解决方案(正如上面@Dogbert评论的那样),这使得补救这个问题的优先级很低。