개발 지식

개발 지식

Rust PartialEq만 파생하면 해시 키로 못 쓴다

페이지 정보

profile_image
영삼이
0건 123회 25-03-28 15:18

본문

PartialEq만 파생하면 해시 키로 못 쓴다

Hash도 함께 구현해야 map/set에서 동작한다


Rust에선 == 비교를 위해 PartialEq 트레이트를 쓴다:

#[derive(PartialEq)]
struct User {
    id: u32,
    name: String,
}

하지만 이 상태로는 HashMap이나 HashSet에 못 쓴다:

use std::collections::HashSet;

let mut set = HashSet::new();
set.insert(User { id: 1, name: "영삼".to_string() }); // ❌ 에러 발생

❌ 이유

  • HashSetHashMap은 내부에서 해시를 사용

  • 해시 키로 쓰려면 Hash + Eq 둘 다 필요


✅ 해결: 함께 파생해야 함

#[derive(PartialEq, Eq, Hash)]
struct User {
    id: u32,
    name: String,
}

이제 문제 없이 사용 가능:

set.insert(User { id: 1, name: "영삼".to_string() }); // ✅ OK

✔️ HashSet이나 HashMap의 키로 쓰려면
PartialEq만으론 부족하고, 반드시 EqHash도 구현해야 한다.
파생 매크로(derive)로 한 번에 처리하자.

댓글목록

등록된 댓글이 없습니다.