[swift-evolution] Custom equality/hash for Sets

Dave Abrahams dabrahams at apple.com
Thu Feb 18 18:09:13 CST 2016

on Thu Feb 18 2016, Jacob Bandes-Storch <swift-evolution at swift.org> wrote:

> Would it make sense for the standard library Set to provide variants (or
> parallel versions of the same data structure) that take custom hashValue/==
> implementations at init time (functions taking in Elements), rather than
> relying on Hashable/Comparable protocols?
> Use case: I want a set of objects that are compared for equality using ===
> rather than ==. This doesn't seem possible today, using Set, without
> creating some sort of wrapper object.
> This particular case would be analogous to using NSHashTable with
> NSPointerFunctionsObjectPointerPersonality. (Maybe all I'm asking for is a
> Swiftier API for NSHashTable — including ArrayLiteralConvertible, using
> generics instead of UnsafePointer<Void>, etc.)
> Similarly, C++'s unordered_map
> <http://en.cppreference.com/w/cpp/container/unordered_map> and friends have
> template parameters specifying the hash function and equality comparator,
> which use std::hash and == by default.

It might make sense.  How bad is the wrapper solution for user code?


More information about the swift-evolution mailing list