TreeMultiMap
data-structure-typed / TreeMultiMap
Class: TreeMultiMap<K, V, R>
Defined in: data-structures/binary-tree/tree-multi-map.ts:28
TreeMultiMap (ordered MultiMap) — key → bucket (Array of values).
Semantics (RFC):
- Bucketed design: each key appears once; duplicates live in the bucket.
get(key)returns a live bucket reference.- Default iteration yields bucket entries:
[K, V[]]. - Navigable operations (
first/last/ceiling/...) return entry tuples like TreeMap.
Example
// Morris traversal (O(1) space)
const tmm = new TreeMultiMap<number>([5, 3, 7]);
const result = tmm.morris(n => n.key, 'IN');
console.log(result.length); // > 0;
Type Parameters
K
K = any
V
V = any
R
R = any
Implements
Iterable<[K,V[]]>
Constructors
Constructor
new TreeMultiMap<K, V, R>(keysNodesEntriesOrRaws?, options?): TreeMultiMap<K, V, R>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:45
Creates a new TreeMultiMap.
Parameters
keysNodesEntriesOrRaws?
Iterable<
| K
| R
| [K | null | undefined, V[] | undefined]
| null
| undefined> = []
Initial entries, or raw elements if toEntryFn is provided.
options?
TreeMultiMapOptions<K, V[], R> = {}
Configuration options including optional toEntryFn to transform raw elements.
Returns
TreeMultiMap<K, V, R>
Remarks
Time O(m log m), Space O(m) where m is the number of initial entries
Example
// Standard usage with entries
const mmap = new TreeMultiMap([['a', ['x', 'y']], ['b', ['z']]]);
// Using toEntryFn to transform raw objects
const players = [{ score: 100, items: ['sword'] }, { score: 200, items: ['shield', 'bow'] }];
const mmap = new TreeMultiMap(players, { toEntryFn: p => [p.score, p.items] });
Accessors
comparator
Get Signature
get comparator(): Comparator<K>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:4352
Expose comparator for advanced usage/testing (read-only).
Remarks
Time O(1), Space O(1)
Returns
Comparator<K>
size
Get Signature
get size(): number;
Defined in: data-structures/binary-tree/tree-multi-map.ts:109
Number of distinct keys.
Remarks
Time O(1), Space O(1)
Returns
number
totalSize
Get Signature
get totalSize(): number;
Defined in: data-structures/binary-tree/tree-multi-map.ts:520
Total number of values across all buckets (Σ bucket.length).
Remarks
Time O(n), Space O(1)
Example
// Total number of values
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(1, 'b');
mm.add(2, 'c');
console.log(mm.totalSize); // 3;
Returns
number
Methods
[iterator]()
iterator: Iterator<[K, V[]]>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:1677
Iterates over all entries as [key, bucket] pairs.
Returns
Iterator<[K, V[]]>
Remarks
Time O(n), Space O(1)
Implementation of
Iterable.[iterator]
add()
add(key, value): boolean;
Defined in: data-structures/binary-tree/tree-multi-map.ts:1094
Append a single value.
Parameters
key
K
value
V
Returns
boolean
Remarks
Time O(log n), Space O(1)
Example
// Add key-value pair
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(1, 'b');
mm.add(2, 'c');
console.log(mm.get(1)); // ['a', 'b'];
ceiling()
ceiling(key): [K, V[]] | undefined;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2556
Returns the entry with the smallest key >= given key.
Parameters
key
K
Returns
[K, V[]] | undefined
Remarks
Time O(log n), Space O(1)
Example
// Least key ≥ target
const mm = new TreeMultiMap<number, string>();
mm.add(10, 'a');
mm.add(20, 'b');
mm.add(30, 'c');
console.log(mm.ceiling(15)?.[0]); // 20;
clear()
clear(): void;
Defined in: data-structures/binary-tree/tree-multi-map.ts:440
Removes all entries from the map.
Returns
void
Remarks
Time O(1), Space O(1)
Example
// Remove all entries
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.clear();
console.log(mm.isEmpty()); // true;
clone()
clone(): TreeMultiMap<K, V, R>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:4344
Creates a shallow clone of this map.
Returns
TreeMultiMap<K, V, R>
Remarks
Time O(n log n), Space O(n)
Example
// Deep clone
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
const copy = mm.clone();
copy.delete(1);
console.log(mm.has(1)); // true;
count()
count(key): number;
Defined in: data-structures/binary-tree/tree-multi-map.ts:479
Bucket length for a key (missing => 0).
Parameters
key
K
Returns
number
Remarks
Time O(log n), Space O(1)
Example
// Count values for key
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(1, 'b');
console.log(mm.count(1)); // 2;
delete()
delete(key): boolean;
Defined in: data-structures/binary-tree/tree-multi-map.ts:1528
Deletes a key and its entire bucket.
Parameters
key
K
Returns
boolean
Remarks
Time O(log n), Space O(1)
Example
// Remove key
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(2, 'b');
mm.delete(1);
console.log(mm.has(1)); // false;
deleteValue()
deleteValue(
key,
value,
eq?): boolean;
Defined in: data-structures/binary-tree/tree-multi-map.ts:1610
Delete a single occurrence of a value from a key's bucket.
Parameters
key
K
value
V
eq?
(a, b) => boolean
Returns
boolean
Remarks
Time O(log n + m), Space O(1) where m is bucket size
Example
// Delete specific value
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(1, 'b');
mm.deleteValue(1, 'a');
console.log(mm.get(1)); // ['b'];
deleteValues()
deleteValues(
key,
value,
eq?): number;
Defined in: data-structures/binary-tree/tree-multi-map.ts:1657
Delete all occurrences of a value from a key's bucket.
Parameters
key
K
value
V
eq?
(a, b) => boolean
Returns
number
Remarks
Time O(log n + m), Space O(1) where m is bucket size
Example
// Delete all matching values
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(1, 'a');
mm.add(1, 'b');
const count = mm.deleteValues(1, 'a');
console.log(count); // 2;
entriesOf()
entriesOf(key): IterableIterator<[K, V]>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2055
Iterates over all entries for a specific key.
Parameters
key
K
Returns
IterableIterator<[K, V]>
Remarks
Time O(log n + m), Space O(1) where m is bucket size
Example
// Get entries for key
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(1, 'b');
console.log([...mm.entriesOf(1)]); // [[1, 'a'], [1, 'b']];
filter()
filter(predicate): TreeMultiMap<K, V, R>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:3523
Creates a new map with entries that pass the predicate.
Parameters
predicate
(value, key, map) => boolean
Returns
TreeMultiMap<K, V, R>
Remarks
Time O(n), Space O(n)
Example
// Filter entries
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(2, 'b');
mm.add(3, 'c');
const filtered = mm.filter((v, k) => k > 1);
console.log([...filtered.keys()]); // [2, 3];
first()
first(): [K, V[]] | undefined;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2216
Returns the entry with the smallest key.
Returns
[K, V[]] | undefined
Remarks
Time O(log n), Space O(1)
Example
// First entry
const mm = new TreeMultiMap<number, string>();
mm.add(3, 'c');
mm.add(1, 'a');
console.log(mm.first()?.[0]); // 1;
flatEntries()
flatEntries(): IterableIterator<[K, V]>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2138
Iterates over all [key, value] pairs (flattened from buckets).
Returns
IterableIterator<[K, V]>
Remarks
Time O(T), Space O(1) where T is totalSize
Example
// All key-value pairs flattened
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(1, 'b');
mm.add(2, 'c');
console.log([...mm.flatEntries()]); // [[1, 'a'], [1, 'b'], [2, 'c']];
floor()
floor(key): [K, V[]] | undefined;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2731
Returns the entry with the largest key <= given key.
Parameters
key
K
Returns
[K, V[]] | undefined
Remarks
Time O(log n), Space O(1)
Example
// Greatest key ≤ target
const mm = new TreeMultiMap<number, string>();
mm.add(10, 'a');
mm.add(20, 'b');
mm.add(30, 'c');
console.log(mm.floor(25)?.[0]); // 20;
forEach()
forEach(callback): void;
Defined in: data-structures/binary-tree/tree-multi-map.ts:3352
Executes a callback for each entry.
Parameters
callback
(value, key, map) => void
Returns
void
Remarks
Time O(n), Space O(1)
Example
// Iterate entries
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(2, 'b');
const keys: number[] = [];
mm.forEach((v, k) => keys.push(k));
console.log(keys); // [1, 2];
get()
get(key): V[] | undefined;
Defined in: data-structures/binary-tree/tree-multi-map.ts:931
Live bucket reference (do not auto-delete key if bucket becomes empty via mutation).
Parameters
key
K
Returns
V[] | undefined
Remarks
Time O(log n), Space O(1)
Example
// Get values for key
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(1, 'b');
console.log(mm.get(1)); // ['a', 'b'];
has()
has(key): boolean;
Defined in: data-structures/binary-tree/tree-multi-map.ts:726
Whether the map contains the given key.
Parameters
key
K
Returns
boolean
Remarks
Time O(log n), Space O(1)
Example
// Check key existence
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
console.log(mm.has(1)); // true;
console.log(mm.has(2)); // false;
hasEntry()
hasEntry(
key,
value,
eq?): boolean;
Defined in: data-structures/binary-tree/tree-multi-map.ts:1568
Check if a specific value exists in a key's bucket.
Parameters
key
K
value
V
eq?
(a, b) => boolean
Returns
boolean
Remarks
Time O(log n + m), Space O(1) where m is bucket size
Example
// Check specific key-value
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
console.log(mm.hasEntry(1, 'a')); // true;
console.log(mm.hasEntry(1, 'z')); // false;
higher()
higher(key): [K, V[]] | undefined;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2871
Returns the entry with the smallest key > given key.
Parameters
key
K
Returns
[K, V[]] | undefined
Remarks
Time O(log n), Space O(1)
Example
// Least key > target
const mm = new TreeMultiMap<number, string>();
mm.add(10, 'a');
mm.add(20, 'b');
console.log(mm.higher(10)?.[0]); // 20;
isEmpty()
isEmpty(): boolean;
Defined in: data-structures/binary-tree/tree-multi-map.ts:273
Whether the map is empty.
Returns
boolean
Remarks
Time O(1), Space O(1)
Example
// Check if empty
console.log(new TreeMultiMap().isEmpty()); // true;
keys()
keys(): IterableIterator<K>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:1847
Iterates over all keys.
Returns
IterableIterator<K>
Remarks
Time O(n), Space O(1)
Example
// Iterate keys
const mm = new TreeMultiMap<number, string>();
mm.add(3, 'c');
mm.add(1, 'a');
console.log([...mm.keys()]); // [1, 3];
last()
last(): [K, V[]] | undefined;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2293
Returns the entry with the largest key.
Returns
[K, V[]] | undefined
Remarks
Time O(log n), Space O(1)
Example
// Last entry
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(3, 'c');
console.log(mm.last()?.[0]); // 3;
lower()
lower(key): [K, V[]] | undefined;
Defined in: data-structures/binary-tree/tree-multi-map.ts:3011
Returns the entry with the largest key < given key.
Parameters
key
K
Returns
[K, V[]] | undefined
Remarks
Time O(log n), Space O(1)
Example
// Greatest key < target
const mm = new TreeMultiMap<number, string>();
mm.add(10, 'a');
mm.add(20, 'b');
console.log(mm.lower(20)?.[0]); // 10;
map()
map<V2>(mapper): TreeMultiMap<K, V2, R>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:3694
Creates a new map by transforming each entry.
Type Parameters
V2
V2
Parameters
mapper
(value, key, map) => [K, V2[]]
Returns
TreeMultiMap<K, V2, R>
Remarks
Time O(n log n), Space O(n)
Example
// Transform values
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
const mapped = mm.map((v, k) => [k, v.map(s => s.toUpperCase())] as [number, string[]]);
console.log(mapped.get(1)); // ['A'];
pollFirst()
pollFirst(): [K, V[]] | undefined;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2338
Removes and returns the entry with the smallest key.
Returns
[K, V[]] | undefined
Remarks
Time O(log n), Space O(1)
Example
// Remove and return first
const mm = new TreeMultiMap<number, string>();
mm.add(2, 'b');
mm.add(1, 'a');
const first = mm.pollFirst();
console.log(first?.[0]); // 1;
console.log(mm.has(1)); // false;
pollLast()
pollLast(): [K, V[]] | undefined;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2382
Removes and returns the entry with the largest key.
Returns
[K, V[]] | undefined
Remarks
Time O(log n), Space O(1)
Example
// Remove and return last
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(3, 'c');
const last = mm.pollLast();
console.log(last?.[0]); // 3;
print()
print(): void;
Defined in: data-structures/binary-tree/tree-multi-map.ts:3183
Prints the internal tree structure (for debugging).
Returns
void
Remarks
Time O(n), Space O(n)
Example
// Display tree
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
expect(() => mm.print()).not.toThrow();
rangeSearch()
rangeSearch<C>(range, callback?): ReturnType<C>[];
Defined in: data-structures/binary-tree/tree-multi-map.ts:4173
Searches for entries within a key range.
Type Parameters
C
C extends (node) => unknown
Parameters
range
Range<K> | [K, K]
callback?
C
Returns
ReturnType<C>[]
Remarks
Time O(log n + k), Space O(k) where k is result size
Example
// Find keys in range
const mm = new TreeMultiMap<number, string>();
mm.add(10, 'a');
mm.add(20, 'b');
mm.add(30, 'c');
const result = mm.rangeSearch([15, 25]);
console.log(result.length); // 1;
reduce()
reduce<U>(callback, initialValue): U;
Defined in: data-structures/binary-tree/tree-multi-map.ts:3868
Reduces all entries to a single value.
Type Parameters
U
U
Parameters
callback
(accumulator, value, key, map) => U
initialValue
U
Returns
U
Remarks
Time O(n), Space O(1)
Example
// Aggregate
const mm = new TreeMultiMap<number, number>();
mm.add(1, 10);
mm.add(2, 20);
const sum = mm.reduce((acc, v) => acc + v.reduce((a, b) => a + b, 0), 0);
console.log(sum); // 30;
set()
Call Signature
set(entry, value?): boolean;
Defined in: data-structures/binary-tree/tree-multi-map.ts:1302
Alias for compatibility with existing TreeMultiMap semantics.
Parameters
entry
| K
| [K | null | undefined, V[] | undefined]
| null
| undefined
value?
V
Returns
boolean
Remarks
Time O(log n), Space O(1) for single value; O(log n + m) for bucket append
Example
// Set values for key
const mm = new TreeMultiMap<number, string>();
mm.set(1, 'a');
mm.set(1, 'b');
console.log(mm.get(1)); // ['a', 'b'];
Call Signature
set(key, value): boolean;
Defined in: data-structures/binary-tree/tree-multi-map.ts:1303
Alias for compatibility with existing TreeMultiMap semantics.
Parameters
key
K
value
V
Returns
boolean
Remarks
Time O(log n), Space O(1) for single value; O(log n + m) for bucket append
Example
// Set values for key
const mm = new TreeMultiMap<number, string>();
mm.set(1, 'a');
mm.set(1, 'b');
console.log(mm.get(1)); // ['a', 'b'];
setMany()
setMany(keysNodesEntriesOrRaws): boolean[];
Defined in: data-structures/binary-tree/tree-multi-map.ts:4030
Sets multiple entries at once.
Parameters
keysNodesEntriesOrRaws
Iterable<K | [K | null | undefined, V[] | undefined]>
Returns
boolean[]
Remarks
Time O(m log n), Space O(m) where m is input size
Example
// Set multiple entries
const mm = new TreeMultiMap<number, string>();
mm.setMany([[1, ['a']], [2, ['b']]]);
console.log(mm.size); // 2;
values()
values(): IterableIterator<V[]>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2014
Iterates over all buckets.
Returns
IterableIterator<V[]>
Remarks
Time O(n), Space O(1)
Example
// Iterate value arrays
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(1, 'b');
console.log([...mm.values()]); // [['a', 'b']];
valuesOf()
valuesOf(key): IterableIterator<V>;
Defined in: data-structures/binary-tree/tree-multi-map.ts:2096
Iterates over all values for a specific key.
Parameters
key
K
Returns
IterableIterator<V>
Remarks
Time O(log n + m), Space O(1) where m is bucket size
Example
// Get flat values for key
const mm = new TreeMultiMap<number, string>();
mm.add(1, 'a');
mm.add(1, 'b');
console.log([...mm.valuesOf(1)]); // ['a', 'b'];