hash - 我如何使用 std::hash::hash?

标签 hash rust

我正在尝试使用 Rust 的 std::hash 函数:

use std::hash::{hash, Hash, SipHasher};

#[test]
fn hash_test() {
    println!("{}", hash::<_, SipHasher>(&"hello"));
}

我收到这个错误:

error: use of unstable library feature 'hash': module was recently redesigned

我的 Rust 版本是:

rustc 1.0.0-beta (9854143cb 2015-04-02) (built 2015-04-02)

这个语法不再有效吗?

最佳答案

最初的问题是尝试使用一个不稳定的功能——这意味着它不允许在稳定版本中使用,例如 1.0-beta 或 1.0。从他们开始,该功能已从语言中删除。

替换是编写您自己的版本,它允许您指定哈希函数。此外,直接使用 SipHasher 已被弃用。如果你需要一个特定的哈希算法,你应该从 crates.io 中提取它。否则,您可以使用标准库中未指定的哈希算法:

use std::hash::{Hash, Hasher};
use std::collections::hash_map::DefaultHasher;

#[derive(Hash)]
struct Person {
    id: u32,
    name: String,
    phone: u64,
}

fn my_hash<T>(obj: T) -> u64
where
    T: Hash,
{
    let mut hasher = DefaultHasher::new();
    obj.hash(&mut hasher);
    hasher.finish()
}

fn main() {
    let person1 = Person {
        id: 5,
        name: "Janet".to_string(),
        phone: 555_666_7777,
    };
    let person2 = Person {
        id: 5,
        name: "Bob".to_string(),
        phone: 555_666_7777,
    };

    println!("{}", my_hash(person1));
    println!("{}", my_hash(person2));
}

关于hash - 我如何使用 std::hash::hash?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29573605/

相关文章:

import - 无法导入 StrBuf?

java - 迭代 HashMap,两种方式 : iterating with entry set & iterating with enumeration

css - :hover{} precedence in gecko

rust - 我可以在单线程上下文中安全地使用 Ordering::Relaxed 吗?

rust - 字符串到解析值的向量

c - 使用Clang将C++库编译为wasm失败,找不到 'stdlib.h'文件错误

java - 创建独立的哈希函数

arrays - 如何提高我的域名统计算法的效率?

ruby - 字典=哈希?

rust - 为什么在改变Result的类型时,匹配一个Result需要显式的Err?