Entries are ordered according to insertion order.
From what I've been told on #guile(*), it maps keys to indexes in a
regular hash table, and stores the real values in a vector. That means
lookups involve an additional pointer dereference. Deleted entries lead
to holes (wasted slots) in the values vector, but the table is compacted
when 50% or more allocated entries are dead.
(*) https://gnunet.org/bot/log/guile/2015-09-13#T750068