Skip to content Search Apps Documentation Source Content File Folder Download Copy Actions State String Boolean Number Struct Map Slice Pointer Function Closure Reference Nil Package Type Interface Unknown

Community realm. Read the code first. Community realm, deployed by its author. Read the code before you interact or send coins.

/p/nym-moultest123/x/daily/flatmap/v0

Directory · 4 Files
README.md Open

gno.land/p/nym-moultest123/x/daily/flatmap/v0

Sorted-vector map — New, Set, Get, Has, Delete, Keys, Values, At, Iterate, Range, Clone, Sorted, MaxEntries.

1import "gno.land/p/nym-moultest123/x/daily/flatmap/v0"
2
3f := flatmap.New()
4f.Set("delta", "4"); f.Set("alpha", "1")
5f.Keys()                  // ["alpha" "delta"] — sorted by construction
6f.At(0)                   // "alpha", "1", true — indexed access
7f.Range("a", "c", fn)     // lo inclusive, hi exclusive

The STL flat_map trade. Keys and values live in two parallel sorted slices instead of a hash table or a tree of nodes:

operation cost
Get O(log n) binary search over contiguous memory
iteration O(n), already ordered, nothing to sort
Set in the middle O(n) — the tail shifts
Set at the end O(1) amortised — the fast path

Cheap reads and cheap ordered iteration, paid for at write time. That trade is stated rather than hidden.

On chain the ordering is the real draw: a built-in gno map iterates in an unspecified order, so a Render built from one can differ between nodes. A flat map is sorted by construction, so iteration is deterministic without a sort on every read.

Sorted storage also buys two things a hash map cannot offer: At(i) positional access, and Range(lo, hi) as two binary searches and a walk — including when the bounds are not themselves keys.

Sorted() is exported so callers can assert the invariant; it holds through the whole public API, including 200 worst-case head insertions.

Live demo: r/moul/x/daily/flatmapdemo · render it at /r/nym-moultest123/x/daily/flatmapdemo/v0.


Part of moul/gno-contracts — moul's versioned gno.land contracts. See the repository for the full catalog, build/test tooling, and usage.

🧪 Highly experimental — potentially vibe-coded. Not audited; may break, change, or be removed at any time. Do not use with anything of value. Full disclaimer: DISCLAIMER.