Fun fact: they are nearly the same implementation. See: http://markmail.org/message/ktzomp4uwrmnzao6
In fact, that's exactly how Rust's standard library hashset is implemented since rust supports zero-sized types "in userland" (and unit `()` is a ZST):
pub struct HashSet<T, S = RandomState> {
map: HashMap<T, (), S>
}
http://doc.rust-lang.org/src/std/collections/hash/set.rs.htm...