Class TreeMultiSet<K, R>

Type Parameters

  • K = any
  • R = K

Implements

  • Iterable<K>

Constructors

  • Creates a new TreeMultiSet.

    Type Parameters

    • K = any
    • R = K

    Parameters

    • elements: Iterable<K, any, any> | Iterable<R, any, any> = []

      Initial elements to add, or raw elements if toElementFn is provided.

    • options: TreeMultiSetOptions<K, R> = {}

      Configuration options including optional toElementFn to transform raw elements.

    Returns TreeMultiSet<K, R>

    Time O(m log m), Space O(m) where m is the number of initial elements

    // Standard usage with elements
    const mset = new TreeMultiSet([1, 2, 2, 3]);

    // Using toElementFn to transform raw objects
    const items = [{ score: 100 }, { score: 200 }, { score: 100 }];
    const mset = new TreeMultiSet<number, Item>(items, { toElementFn: item => item.score });

Accessors

Methods

  • Expanded iteration (default). Each key is yielded count(key) times.

    Returns Iterator<K, any, any>

    Time O(size), Space O(1) where size is total occurrences

  • Returns the smallest key >= given key, or undefined.

    Parameters

    • key: K

    Returns undefined | K

    Time O(log n), Space O(1)

    const ms = new TreeMultiSet([10, 20, 30]);
    ms.ceiling(15); // 20
    ms.ceiling(20); // 20
  • Creates a new TreeMultiSet with entries that match the predicate.

    Parameters

    • predicate: ((key: K, count: number) => boolean)
        • (key, count): boolean
        • Parameters

          • key: K
          • count: number

          Returns boolean

    Returns TreeMultiSet<K, K>

    Time O(n log n), Space O(n)

    const ms = new TreeMultiSet([1, 1, 2, 3, 3, 3]);
    const filtered = ms.filter((key, count) => count >= 2);
    // TreeMultiSet { 1: 2, 3: 3 }
  • Returns the largest key <= given key, or undefined.

    Parameters

    • key: K

    Returns undefined | K

    Time O(log n), Space O(1)

    const ms = new TreeMultiSet([10, 20, 30]);
    ms.floor(25); // 20
    ms.floor(20); // 20
  • Iterates over distinct keys with their counts.

    Parameters

    • callback: ((key: K, count: number) => void)
        • (key, count): void
        • Parameters

          • key: K
          • count: number

          Returns void

    Returns void

    Time O(n), Space O(1)

    const ms = new TreeMultiSet([1, 1, 2, 3, 3, 3]);
    ms.forEach((key, count) => console.log(`${key}: ${count}`));
    // 1: 2, 2: 1, 3: 3
  • Returns the smallest key > given key, or undefined.

    Parameters

    • key: K

    Returns undefined | K

    Time O(log n), Space O(1)

    const ms = new TreeMultiSet([10, 20, 30]);
    ms.higher(10); // 20
    ms.higher(15); // 20
  • Returns the largest key < given key, or undefined.

    Parameters

    • key: K

    Returns undefined | K

    Time O(log n), Space O(1)

    const ms = new TreeMultiSet([10, 20, 30]);
    ms.lower(20); // 10
    ms.lower(15); // 10
  • Maps keys and counts to a new TreeMultiSet. When multiple keys map to the same new key, counts are merged (added).

    Type Parameters

    • K2

    Parameters

    • mapper: ((key: K, count: number) => [K2, number])
        • (key, count): [K2, number]
        • Parameters

          • key: K
          • count: number

          Returns [K2, number]

    • Optionaloptions: {
          comparator?: Comparator<K2>;
      }
      • Optionalcomparator?: Comparator<K2>

    Returns TreeMultiSet<K2, K2>

    Time O(n log n), Space O(n)

    const ms = new TreeMultiSet([1, 1, 2, 3, 3, 3]);
    const mapped = ms.map((key, count) => [key * 10, count]);
    // TreeMultiSet { 10: 2, 20: 1, 30: 3 }
    // Collision: counts merge
    const ms = new TreeMultiSet([1, 2, 3]);
    const merged = ms.map((key, count) => [key % 2, count]);
    // { 0: 1, 1: 2 } (1 and 3 both map to 1, counts add)
  • Removes all occurrences of the smallest key and returns it.

    Returns undefined | K

    Time O(log n), Space O(1)

    const ms = new TreeMultiSet([1, 1, 2, 3]);
    ms.pollFirst(); // 1
    ms.has(1); // false
  • Removes all occurrences of the largest key and returns it.

    Returns undefined | K

    Time O(log n), Space O(1)

    const ms = new TreeMultiSet([1, 2, 3, 3]);
    ms.pollLast(); // 3
    ms.has(3); // false
  • Returns keys within the given range.

    Type Parameters

    • C extends ((key: K) => any)

    Parameters

    • range: [K, K]
    • Optionalcallback: C

    Returns (C extends undefined
        ? K
        : ReturnType<C>)[]

    Time O(log n + k), Space O(k) where k is result size

    const ms = new TreeMultiSet([10, 20, 30, 40, 50]);
    ms.rangeSearch([15, 45]); // [20, 30, 40]
  • Reduces the multiset to a single value.

    Type Parameters

    • U

    Parameters

    • callback: ((accumulator: U, key: K, count: number) => U)
        • (accumulator, key, count): U
        • Parameters

          • accumulator: U
          • key: K
          • count: number

          Returns U

    • initialValue: U

    Returns U

    Time O(n), Space O(1)

    const ms = new TreeMultiSet([1, 1, 2, 3, 3, 3]);
    const total = ms.reduce((acc, key, count) => acc + count, 0); // 6