SwissMap is a hash table adapated from the "SwissTable" family of hash tables from Abseil. It uses AES instructions for fast-hashing and performs key lookups in parallel using SSE instructions. Because of these optimizations, SwissMap is faster and more memory efficient than Golang's built-in map
. If you'd like to learn more about its design and implementation, check out this blog post announcing its release.
SwissMap exposes the same interface as the built-in map
. Give it a try using this Go playground.
package main
import "github.com/dolthub/swiss"
func main() {
m := swiss.NewMap[string, int](42)
m.Put("foo", 1)
m.Put("bar", 2)
m.Iter(func(k string, v int) (stop bool) {
println("iter", k, v)
return false // continue
})
if x, ok := m.Get("foo"); ok {
println(x)
}
if m.Has("bar") {
x, _ := m.Get("bar")
println(x)
}
m.Put("foo", -1)
m.Delete("bar")
if x, ok := m.Get("foo"); ok {
println(x)
}
if m.Has("bar") {
x, _ := m.Get("bar")
println(x)
}
m.Clear()
// Output:
// iter foo 1
// iter bar 2
// 1
// 2
// -1
}