dolthub / swiss

Golang port of Abseil's SwissTable
Apache License 2.0
773 stars 39 forks source link
abseil asm collection data-structures generics golang hashmap hashtable sse3 swisstable

SwissMap

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.

Example

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
}