Rust PartialEq만 파생하면 해시 키로 못 쓴다
페이지 정보

영삼이
본문
✅ 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() }); // ❌ 에러 발생
❌ 이유
-
HashSet
과HashMap
은 내부에서 해시를 사용 -
해시 키로 쓰려면
Hash + Eq
둘 다 필요
✅ 해결: 함께 파생해야 함
#[derive(PartialEq, Eq, Hash)]
struct User {
id: u32,
name: String,
}
이제 문제 없이 사용 가능:
set.insert(User { id: 1, name: "영삼".to_string() }); // ✅ OK
✔️ HashSet
이나 HashMap
의 키로 쓰려면
PartialEq
만으론 부족하고, 반드시 Eq
와 Hash
도 구현해야 한다.
파생 매크로(derive
)로 한 번에 처리하자.
- 이전글unwrap()을 습관처럼 쓰면 언젠가 프로그램이 터진다 25.03.28
- 다음글Drop은 정리만 하고 로직은 넣지 마라 25.03.28
댓글목록
등록된 댓글이 없습니다.