max-priority-queue-typed 2.4.5 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +63 -0
  2. package/dist/cjs/index.cjs +694 -119
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs-legacy/index.cjs +693 -118
  5. package/dist/cjs-legacy/index.cjs.map +1 -1
  6. package/dist/esm/index.mjs +694 -119
  7. package/dist/esm/index.mjs.map +1 -1
  8. package/dist/esm-legacy/index.mjs +693 -118
  9. package/dist/esm-legacy/index.mjs.map +1 -1
  10. package/dist/types/data-structures/base/index.d.ts +1 -0
  11. package/dist/types/data-structures/base/iterable-element-base.d.ts +1 -1
  12. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  13. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  14. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +380 -51
  15. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +487 -147
  16. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +956 -80
  17. package/dist/types/data-structures/binary-tree/bst.d.ts +816 -29
  18. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +610 -31
  19. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +326 -135
  20. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3781 -6
  21. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3607 -201
  22. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2874 -65
  23. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3528 -6
  24. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  25. package/dist/types/data-structures/graph/directed-graph.d.ts +429 -47
  26. package/dist/types/data-structures/graph/map-graph.d.ts +59 -1
  27. package/dist/types/data-structures/graph/undirected-graph.d.ts +393 -59
  28. package/dist/types/data-structures/hash/hash-map.d.ts +473 -89
  29. package/dist/types/data-structures/heap/heap.d.ts +581 -99
  30. package/dist/types/data-structures/heap/max-heap.d.ts +46 -0
  31. package/dist/types/data-structures/heap/min-heap.d.ts +59 -0
  32. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +646 -47
  33. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +596 -68
  34. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +793 -12
  35. package/dist/types/data-structures/matrix/matrix.d.ts +499 -0
  36. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +57 -0
  37. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +60 -0
  38. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +60 -0
  39. package/dist/types/data-structures/queue/deque.d.ts +593 -71
  40. package/dist/types/data-structures/queue/queue.d.ts +463 -42
  41. package/dist/types/data-structures/stack/stack.d.ts +384 -32
  42. package/dist/types/data-structures/trie/trie.d.ts +470 -48
  43. package/dist/types/interfaces/graph.d.ts +1 -1
  44. package/dist/types/types/common.d.ts +2 -2
  45. package/dist/types/types/data-structures/binary-tree/segment-tree.d.ts +1 -1
  46. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  47. package/dist/types/types/data-structures/linked-list/skip-linked-list.d.ts +1 -4
  48. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  49. package/dist/types/types/utils/validate-type.d.ts +4 -4
  50. package/dist/umd/max-priority-queue-typed.js +691 -116
  51. package/dist/umd/max-priority-queue-typed.js.map +1 -1
  52. package/dist/umd/max-priority-queue-typed.min.js +1 -1
  53. package/dist/umd/max-priority-queue-typed.min.js.map +1 -1
  54. package/package.json +2 -2
  55. package/src/data-structures/base/index.ts +1 -0
  56. package/src/data-structures/base/iterable-element-base.ts +4 -5
  57. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  58. package/src/data-structures/base/linear-base.ts +3 -3
  59. package/src/data-structures/binary-tree/avl-tree.ts +386 -51
  60. package/src/data-structures/binary-tree/binary-indexed-tree.ts +596 -247
  61. package/src/data-structures/binary-tree/binary-tree.ts +956 -81
  62. package/src/data-structures/binary-tree/bst.ts +840 -35
  63. package/src/data-structures/binary-tree/red-black-tree.ts +689 -97
  64. package/src/data-structures/binary-tree/segment-tree.ts +498 -249
  65. package/src/data-structures/binary-tree/tree-map.ts +3784 -7
  66. package/src/data-structures/binary-tree/tree-multi-map.ts +3614 -211
  67. package/src/data-structures/binary-tree/tree-multi-set.ts +2874 -65
  68. package/src/data-structures/binary-tree/tree-set.ts +3531 -10
  69. package/src/data-structures/graph/abstract-graph.ts +4 -4
  70. package/src/data-structures/graph/directed-graph.ts +429 -47
  71. package/src/data-structures/graph/map-graph.ts +59 -1
  72. package/src/data-structures/graph/undirected-graph.ts +393 -59
  73. package/src/data-structures/hash/hash-map.ts +476 -92
  74. package/src/data-structures/heap/heap.ts +581 -99
  75. package/src/data-structures/heap/max-heap.ts +46 -0
  76. package/src/data-structures/heap/min-heap.ts +59 -0
  77. package/src/data-structures/linked-list/doubly-linked-list.ts +646 -47
  78. package/src/data-structures/linked-list/singly-linked-list.ts +596 -68
  79. package/src/data-structures/linked-list/skip-linked-list.ts +1067 -90
  80. package/src/data-structures/matrix/matrix.ts +584 -12
  81. package/src/data-structures/priority-queue/max-priority-queue.ts +57 -0
  82. package/src/data-structures/priority-queue/min-priority-queue.ts +60 -0
  83. package/src/data-structures/priority-queue/priority-queue.ts +60 -0
  84. package/src/data-structures/queue/deque.ts +592 -70
  85. package/src/data-structures/queue/queue.ts +463 -42
  86. package/src/data-structures/stack/stack.ts +384 -32
  87. package/src/data-structures/trie/trie.ts +470 -48
  88. package/src/interfaces/graph.ts +1 -1
  89. package/src/types/common.ts +2 -2
  90. package/src/types/data-structures/binary-tree/segment-tree.ts +1 -1
  91. package/src/types/data-structures/heap/heap.ts +1 -0
  92. package/src/types/data-structures/linked-list/skip-linked-list.ts +2 -1
  93. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  94. package/src/types/utils/validate-type.ts +4 -4
@@ -8,14 +8,6 @@
8
8
  import type { Comparator, TreeMultiMapOptions } from '../../types';
9
9
  import { Range } from '../../common';
10
10
  import { RedBlackTreeNode } from './red-black-tree';
11
- /**
12
- * Node type used by TreeMultiMap (alias to RedBlackTreeNode for backward compatibility).
13
- *
14
- * @deprecated Direct node manipulation is discouraged. Use TreeMultiMap methods instead.
15
- */
16
- export declare class TreeMultiMapNode<K = any, V = any> extends RedBlackTreeNode<K, V[]> {
17
- constructor(key: K, value?: V[]);
18
- }
19
11
  /**
20
12
  * TreeMultiMap (ordered MultiMap) — key → bucket (Array of values).
21
13
  *
@@ -25,169 +17,10 @@ export declare class TreeMultiMapNode<K = any, V = any> extends RedBlackTreeNode
25
17
  * - Default iteration yields bucket entries: `[K, V[]]`.
26
18
  * - Navigable operations (`first/last/ceiling/...`) return entry tuples like TreeMap.
27
19
  * @example
28
- * // players ranked by score with their equipment
29
- * type Equipment = {
30
- * name: string; // Equipment name
31
- * quality: 'legendary' | 'epic' | 'rare' | 'common';
32
- * level: number;
33
- * };
34
- *
35
- * type Player = {
36
- * name: string;
37
- * score: number;
38
- * equipments: Equipment[];
39
- * };
40
- *
41
- * // Mock player data with their scores and equipment
42
- * const players: Player[] = [
43
- * {
44
- * name: 'DragonSlayer',
45
- * score: 8750,
46
- * equipments: [
47
- * { name: 'AWM', quality: 'legendary', level: 85 },
48
- * { name: 'Level 3 Helmet', quality: 'epic', level: 80 },
49
- * { name: 'Extended Quickdraw Mag', quality: 'rare', level: 75 },
50
- * { name: 'Compensator', quality: 'epic', level: 78 },
51
- * { name: 'Vertical Grip', quality: 'rare', level: 72 }
52
- * ]
53
- * },
54
- * {
55
- * name: 'ShadowNinja',
56
- * score: 7200,
57
- * equipments: [
58
- * { name: 'M416', quality: 'epic', level: 75 },
59
- * { name: 'Ghillie Suit', quality: 'rare', level: 70 },
60
- * { name: 'Red Dot Sight', quality: 'common', level: 65 },
61
- * { name: 'Extended QuickDraw Mag', quality: 'rare', level: 68 }
62
- * ]
63
- * },
64
- * {
65
- * name: 'RuneMaster',
66
- * score: 9100,
67
- * equipments: [
68
- * { name: 'KAR98K', quality: 'legendary', level: 90 },
69
- * { name: 'Level 3 Vest', quality: 'legendary', level: 85 },
70
- * { name: 'Holographic Sight', quality: 'epic', level: 82 },
71
- * { name: 'Suppressor', quality: 'legendary', level: 88 },
72
- * { name: 'Level 3 Backpack', quality: 'epic', level: 80 }
73
- * ]
74
- * },
75
- * {
76
- * name: 'BattleKing',
77
- * score: 8500,
78
- * equipments: [
79
- * { name: 'AUG', quality: 'epic', level: 82 },
80
- * { name: 'Red Dot Sight', quality: 'rare', level: 75 },
81
- * { name: 'Extended Mag', quality: 'common', level: 70 },
82
- * { name: 'Tactical Stock', quality: 'rare', level: 76 }
83
- * ]
84
- * },
85
- * {
86
- * name: 'SniperElite',
87
- * score: 7800,
88
- * equipments: [
89
- * { name: 'M24', quality: 'legendary', level: 88 },
90
- * { name: 'Compensator', quality: 'epic', level: 80 },
91
- * { name: 'Scope 8x', quality: 'legendary', level: 85 },
92
- * { name: 'Level 2 Helmet', quality: 'rare', level: 75 }
93
- * ]
94
- * },
95
- * {
96
- * name: 'RushMaster',
97
- * score: 7500,
98
- * equipments: [
99
- * { name: 'Vector', quality: 'rare', level: 72 },
100
- * { name: 'Level 2 Helmet', quality: 'common', level: 65 },
101
- * { name: 'Quickdraw Mag', quality: 'common', level: 60 },
102
- * { name: 'Laser Sight', quality: 'rare', level: 68 }
103
- * ]
104
- * },
105
- * {
106
- * name: 'GhostWarrior',
107
- * score: 8200,
108
- * equipments: [
109
- * { name: 'SCAR-L', quality: 'epic', level: 78 },
110
- * { name: 'Extended Quickdraw Mag', quality: 'rare', level: 70 },
111
- * { name: 'Holographic Sight', quality: 'epic', level: 75 },
112
- * { name: 'Suppressor', quality: 'rare', level: 72 },
113
- * { name: 'Vertical Grip', quality: 'common', level: 65 }
114
- * ]
115
- * },
116
- * {
117
- * name: 'DeathDealer',
118
- * score: 7300,
119
- * equipments: [
120
- * { name: 'SKS', quality: 'epic', level: 76 },
121
- * { name: 'Holographic Sight', quality: 'rare', level: 68 },
122
- * { name: 'Extended Mag', quality: 'common', level: 65 }
123
- * ]
124
- * },
125
- * {
126
- * name: 'StormRider',
127
- * score: 8900,
128
- * equipments: [
129
- * { name: 'MK14', quality: 'legendary', level: 92 },
130
- * { name: 'Level 3 Backpack', quality: 'legendary', level: 85 },
131
- * { name: 'Scope 8x', quality: 'epic', level: 80 },
132
- * { name: 'Suppressor', quality: 'legendary', level: 88 },
133
- * { name: 'Tactical Stock', quality: 'rare', level: 75 }
134
- * ]
135
- * },
136
- * {
137
- * name: 'CombatLegend',
138
- * score: 7600,
139
- * equipments: [
140
- * { name: 'UMP45', quality: 'rare', level: 74 },
141
- * { name: 'Level 2 Vest', quality: 'common', level: 67 },
142
- * { name: 'Red Dot Sight', quality: 'common', level: 62 },
143
- * { name: 'Extended Mag', quality: 'rare', level: 70 }
144
- * ]
145
- * }
146
- * ];
147
- *
148
- * // Create a TreeMultiMap for player rankings
149
- * const playerRankings = new TreeMultiMap<number, Equipment, Player>(players, {
150
- * toEntryFn: ({ score, equipments }) => [score, equipments],
151
- * isMapMode: false
152
- * });
153
- *
154
- * const topPlayersEquipments = playerRankings.rangeSearch([8900, 10000], node => playerRankings.get(node.key));
155
- * console.log(topPlayersEquipments); // [
156
- * // [
157
- * // {
158
- * // name: 'MK14',
159
- * // quality: 'legendary',
160
- * // level: 92
161
- * // },
162
- * // { name: 'Level 3 Backpack', quality: 'legendary', level: 85 },
163
- * // {
164
- * // name: 'Scope 8x',
165
- * // quality: 'epic',
166
- * // level: 80
167
- * // },
168
- * // { name: 'Suppressor', quality: 'legendary', level: 88 },
169
- * // {
170
- * // name: 'Tactical Stock',
171
- * // quality: 'rare',
172
- * // level: 75
173
- * // }
174
- * // ],
175
- * // [
176
- * // { name: 'KAR98K', quality: 'legendary', level: 90 },
177
- * // {
178
- * // name: 'Level 3 Vest',
179
- * // quality: 'legendary',
180
- * // level: 85
181
- * // },
182
- * // { name: 'Holographic Sight', quality: 'epic', level: 82 },
183
- * // {
184
- * // name: 'Suppressor',
185
- * // quality: 'legendary',
186
- * // level: 88
187
- * // },
188
- * // { name: 'Level 3 Backpack', quality: 'epic', level: 80 }
189
- * // ]
190
- * // ];
20
+ * // Morris traversal (O(1) space)
21
+ * const tmm = new TreeMultiMap<number>([5, 3, 7]);
22
+ * const result = tmm.morris(n => n.key, 'IN');
23
+ * console.log(result.length); // > 0;
191
24
  */
192
25
  export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable<[K, V[]]> {
193
26
  #private;
@@ -218,62 +51,1385 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
218
51
  /**
219
52
  * Whether the map is empty.
220
53
  * @remarks Time O(1), Space O(1)
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+
153
+
154
+
155
+
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+ * @example
198
+ * // Check if empty
199
+ * console.log(new TreeMultiMap().isEmpty()); // true;
221
200
  */
222
201
  isEmpty(): boolean;
223
202
  /**
224
203
  * Removes all entries from the map.
225
204
  * @remarks Time O(1), Space O(1)
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+
224
+
225
+
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+ * @example
349
+ * // Remove all entries
350
+ * const mm = new TreeMultiMap<number, string>();
351
+ * mm.add(1, 'a');
352
+ * mm.clear();
353
+ * console.log(mm.isEmpty()); // true;
226
354
  */
227
355
  clear(): void;
228
356
  /**
229
357
  * Bucket length for a key (missing => 0).
230
358
  * @remarks Time O(log n), Space O(1)
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+ * @example
383
+ * // Count values for key
384
+ * const mm = new TreeMultiMap<number, string>();
385
+ * mm.add(1, 'a');
386
+ * mm.add(1, 'b');
387
+ * console.log(mm.count(1)); // 2;
231
388
  */
232
389
  count(key: K): number;
233
390
  /**
234
391
  * Total number of values across all buckets (Σ bucket.length).
235
392
  * @remarks Time O(n), Space O(1)
393
+
394
+
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+ * @example
417
+ * // Total number of values
418
+ * const mm = new TreeMultiMap<number, string>();
419
+ * mm.add(1, 'a');
420
+ * mm.add(1, 'b');
421
+ * mm.add(2, 'c');
422
+ * console.log(mm.totalSize); // 3;
236
423
  */
237
424
  get totalSize(): number;
238
425
  /**
239
426
  * Whether the map contains the given key.
240
427
  * @remarks Time O(log n), Space O(1)
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+
596
+
597
+
598
+
599
+
600
+
601
+
602
+
603
+
604
+
605
+
606
+ * @example
607
+ * // Check key existence
608
+ * const mm = new TreeMultiMap<number, string>();
609
+ * mm.add(1, 'a');
610
+ * console.log(mm.has(1)); // true;
611
+ * console.log(mm.has(2)); // false;
241
612
  */
242
613
  has(key: K): boolean;
243
614
  /**
244
615
  * Live bucket reference (do not auto-delete key if bucket becomes empty via mutation).
245
616
  * @remarks Time O(log n), Space O(1)
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+
686
+
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+
703
+
704
+
705
+
706
+
707
+
708
+
709
+
710
+
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+
768
+
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+
793
+
794
+
795
+ * @example
796
+ * // Get values for key
797
+ * const mm = new TreeMultiMap<number, string>();
798
+ * mm.add(1, 'a');
799
+ * mm.add(1, 'b');
800
+ * console.log(mm.get(1)); // ['a', 'b'];
246
801
  */
247
802
  get(key: K): V[] | undefined;
248
803
  /**
249
804
  * Append a single value.
250
805
  * @remarks Time O(log n), Space O(1)
806
+
807
+
808
+
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+
831
+
832
+
833
+
834
+
835
+
836
+
837
+
838
+
839
+
840
+
841
+
842
+
843
+
844
+
845
+
846
+
847
+
848
+
849
+
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+
862
+
863
+
864
+
865
+
866
+
867
+
868
+
869
+
870
+
871
+
872
+
873
+
874
+
875
+
876
+
877
+
878
+
879
+
880
+
881
+
882
+
883
+
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+
892
+
893
+
894
+
895
+
896
+
897
+
898
+
899
+
900
+
901
+
902
+
903
+
904
+
905
+
906
+
907
+
908
+
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+
922
+
923
+
924
+
925
+
926
+
927
+
928
+
929
+
930
+
931
+
932
+
933
+
934
+
935
+
936
+
937
+
938
+
939
+
940
+
941
+
942
+
943
+ * @example
944
+ * // Add key-value pair
945
+ * const mm = new TreeMultiMap<number, string>();
946
+ * mm.add(1, 'a');
947
+ * mm.add(1, 'b');
948
+ * mm.add(2, 'c');
949
+ * console.log(mm.get(1)); // ['a', 'b'];
251
950
  */
252
951
  add(key: K, value: V): boolean;
253
952
  /**
254
953
  * Alias for compatibility with existing TreeMultiMap semantics.
255
954
  * @remarks Time O(log n), Space O(1) for single value; O(log n + m) for bucket append
955
+
956
+
957
+
958
+
959
+
960
+
961
+
962
+
963
+
964
+
965
+
966
+
967
+
968
+
969
+
970
+
971
+
972
+
973
+
974
+
975
+
976
+
977
+
978
+
979
+
980
+
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+
1043
+
1044
+
1045
+
1046
+
1047
+
1048
+
1049
+
1050
+
1051
+
1052
+
1053
+
1054
+
1055
+
1056
+
1057
+
1058
+
1059
+
1060
+
1061
+
1062
+
1063
+
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+
1070
+
1071
+
1072
+
1073
+
1074
+
1075
+
1076
+
1077
+
1078
+
1079
+
1080
+
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+
1105
+
1106
+
1107
+
1108
+
1109
+
1110
+
1111
+
1112
+
1113
+
1114
+
1115
+
1116
+
1117
+
1118
+
1119
+
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+ * @example
1132
+ * // Set values for key
1133
+ * const mm = new TreeMultiMap<number, string>();
1134
+ * mm.set(1, 'a');
1135
+ * mm.set(1, 'b');
1136
+ * console.log(mm.get(1)); // ['a', 'b'];
256
1137
  */
257
1138
  set(entry: [K | null | undefined, V[] | undefined] | K | null | undefined, value?: V): boolean;
258
1139
  set(key: K, value: V): boolean;
259
1140
  /**
260
1141
  * Deletes a key and its entire bucket.
261
1142
  * @remarks Time O(log n), Space O(1)
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1218
+
1219
+
1220
+
1221
+
1222
+
1223
+
1224
+
1225
+
1226
+
1227
+
1228
+
1229
+
1230
+
1231
+
1232
+
1233
+
1234
+
1235
+
1236
+
1237
+
1238
+
1239
+
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+
1280
+
1281
+
1282
+
1283
+
1284
+
1285
+
1286
+
1287
+
1288
+
1289
+
1290
+
1291
+
1292
+
1293
+
1294
+
1295
+
1296
+
1297
+
1298
+
1299
+
1300
+
1301
+
1302
+
1303
+
1304
+
1305
+
1306
+
1307
+
1308
+
1309
+
1310
+
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+
1320
+
1321
+ * @example
1322
+ * // Remove key
1323
+ * const mm = new TreeMultiMap<number, string>();
1324
+ * mm.add(1, 'a');
1325
+ * mm.add(2, 'b');
1326
+ * mm.delete(1);
1327
+ * console.log(mm.has(1)); // false;
262
1328
  */
263
1329
  delete(key: K): boolean;
264
1330
  /**
265
1331
  * Check if a specific value exists in a key's bucket.
266
1332
  * @remarks Time O(log n + m), Space O(1) where m is bucket size
1333
+
1334
+
1335
+
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+
1352
+
1353
+
1354
+
1355
+
1356
+ * @example
1357
+ * // Check specific key-value
1358
+ * const mm = new TreeMultiMap<number, string>();
1359
+ * mm.add(1, 'a');
1360
+ * console.log(mm.hasEntry(1, 'a')); // true;
1361
+ * console.log(mm.hasEntry(1, 'z')); // false;
267
1362
  */
268
1363
  hasEntry(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
269
1364
  /**
270
1365
  * Delete a single occurrence of a value from a key's bucket.
271
1366
  * @remarks Time O(log n + m), Space O(1) where m is bucket size
1367
+
1368
+
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+ * @example
1391
+ * // Delete specific value
1392
+ * const mm = new TreeMultiMap<number, string>();
1393
+ * mm.add(1, 'a');
1394
+ * mm.add(1, 'b');
1395
+ * mm.deleteValue(1, 'a');
1396
+ * console.log(mm.get(1)); // ['b'];
272
1397
  */
273
1398
  deleteValue(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
274
1399
  /**
275
1400
  * Delete all occurrences of a value from a key's bucket.
276
1401
  * @remarks Time O(log n + m), Space O(1) where m is bucket size
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+
1423
+
1424
+
1425
+ * @example
1426
+ * // Delete all matching values
1427
+ * const mm = new TreeMultiMap<number, string>();
1428
+ * mm.add(1, 'a');
1429
+ * mm.add(1, 'a');
1430
+ * mm.add(1, 'b');
1431
+ * const count = mm.deleteValues(1, 'a');
1432
+ * console.log(count); // 2;
277
1433
  */
278
1434
  deleteValues(key: K, value: V, eq?: (a: V, b: V) => boolean): number;
279
1435
  /**
@@ -284,136 +1440,2386 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
284
1440
  /**
285
1441
  * Iterates over all keys.
286
1442
  * @remarks Time O(n), Space O(1)
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+
1450
+
1451
+
1452
+
1453
+
1454
+
1455
+
1456
+
1457
+
1458
+
1459
+
1460
+
1461
+
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
1477
+
1478
+
1479
+
1480
+
1481
+
1482
+
1483
+
1484
+
1485
+
1486
+
1487
+
1488
+
1489
+
1490
+
1491
+
1492
+
1493
+
1494
+
1495
+
1496
+
1497
+
1498
+
1499
+
1500
+
1501
+
1502
+
1503
+
1504
+
1505
+
1506
+
1507
+
1508
+
1509
+
1510
+
1511
+
1512
+
1513
+
1514
+
1515
+
1516
+
1517
+
1518
+
1519
+
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+
1529
+
1530
+
1531
+
1532
+
1533
+
1534
+
1535
+
1536
+
1537
+
1538
+
1539
+
1540
+
1541
+
1542
+
1543
+
1544
+
1545
+
1546
+
1547
+
1548
+
1549
+
1550
+
1551
+
1552
+
1553
+
1554
+
1555
+
1556
+
1557
+
1558
+
1559
+
1560
+
1561
+
1562
+
1563
+
1564
+
1565
+
1566
+
1567
+
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+
1574
+
1575
+
1576
+
1577
+
1578
+
1579
+
1580
+
1581
+
1582
+
1583
+
1584
+
1585
+
1586
+ * @example
1587
+ * // Iterate keys
1588
+ * const mm = new TreeMultiMap<number, string>();
1589
+ * mm.add(3, 'c');
1590
+ * mm.add(1, 'a');
1591
+ * console.log([...mm.keys()]); // [1, 3];
287
1592
  */
288
1593
  keys(): IterableIterator<K>;
289
1594
  /**
290
1595
  * Iterates over all buckets.
291
1596
  * @remarks Time O(n), Space O(1)
1597
+
1598
+
1599
+
1600
+
1601
+
1602
+
1603
+
1604
+
1605
+
1606
+
1607
+
1608
+
1609
+
1610
+
1611
+
1612
+
1613
+
1614
+
1615
+
1616
+
1617
+
1618
+
1619
+
1620
+
1621
+
1622
+
1623
+
1624
+
1625
+
1626
+
1627
+
1628
+
1629
+
1630
+
1631
+
1632
+
1633
+
1634
+
1635
+
1636
+
1637
+
1638
+
1639
+
1640
+
1641
+
1642
+
1643
+
1644
+
1645
+
1646
+
1647
+
1648
+
1649
+
1650
+
1651
+
1652
+
1653
+
1654
+
1655
+
1656
+
1657
+
1658
+
1659
+
1660
+
1661
+
1662
+
1663
+
1664
+
1665
+
1666
+
1667
+
1668
+
1669
+
1670
+
1671
+
1672
+
1673
+
1674
+
1675
+
1676
+
1677
+
1678
+
1679
+
1680
+
1681
+
1682
+
1683
+
1684
+
1685
+
1686
+
1687
+
1688
+
1689
+
1690
+
1691
+
1692
+
1693
+
1694
+
1695
+
1696
+
1697
+
1698
+
1699
+
1700
+
1701
+
1702
+
1703
+
1704
+
1705
+
1706
+
1707
+
1708
+
1709
+
1710
+
1711
+
1712
+
1713
+
1714
+
1715
+
1716
+
1717
+
1718
+
1719
+
1720
+
1721
+
1722
+
1723
+
1724
+
1725
+
1726
+
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+
1733
+
1734
+
1735
+
1736
+
1737
+
1738
+
1739
+
1740
+ * @example
1741
+ * // Iterate value arrays
1742
+ * const mm = new TreeMultiMap<number, string>();
1743
+ * mm.add(1, 'a');
1744
+ * mm.add(1, 'b');
1745
+ * console.log([...mm.values()]); // [['a', 'b']];
292
1746
  */
293
1747
  values(): IterableIterator<V[]>;
294
1748
  /**
295
1749
  * Iterates over all entries for a specific key.
296
1750
  * @remarks Time O(log n + m), Space O(1) where m is bucket size
1751
+
1752
+
1753
+
1754
+
1755
+
1756
+
1757
+
1758
+
1759
+
1760
+
1761
+
1762
+
1763
+
1764
+
1765
+
1766
+
1767
+
1768
+
1769
+
1770
+
1771
+
1772
+
1773
+
1774
+ * @example
1775
+ * // Get entries for key
1776
+ * const mm = new TreeMultiMap<number, string>();
1777
+ * mm.add(1, 'a');
1778
+ * mm.add(1, 'b');
1779
+ * console.log([...mm.entriesOf(1)]); // [[1, 'a'], [1, 'b']];
297
1780
  */
298
1781
  entriesOf(key: K): IterableIterator<[K, V]>;
299
1782
  /**
300
1783
  * Iterates over all values for a specific key.
301
1784
  * @remarks Time O(log n + m), Space O(1) where m is bucket size
1785
+
1786
+
1787
+
1788
+
1789
+
1790
+
1791
+
1792
+
1793
+
1794
+
1795
+
1796
+
1797
+
1798
+
1799
+
1800
+
1801
+
1802
+
1803
+
1804
+
1805
+
1806
+
1807
+
1808
+ * @example
1809
+ * // Get flat values for key
1810
+ * const mm = new TreeMultiMap<number, string>();
1811
+ * mm.add(1, 'a');
1812
+ * mm.add(1, 'b');
1813
+ * console.log([...mm.valuesOf(1)]); // ['a', 'b'];
302
1814
  */
303
1815
  valuesOf(key: K): IterableIterator<V>;
304
1816
  /**
305
1817
  * Iterates over all [key, value] pairs (flattened from buckets).
306
1818
  * @remarks Time O(T), Space O(1) where T is totalSize
1819
+
1820
+
1821
+
1822
+
1823
+
1824
+
1825
+
1826
+
1827
+
1828
+
1829
+
1830
+
1831
+
1832
+
1833
+
1834
+
1835
+
1836
+
1837
+
1838
+
1839
+
1840
+
1841
+
1842
+ * @example
1843
+ * // All key-value pairs flattened
1844
+ * const mm = new TreeMultiMap<number, string>();
1845
+ * mm.add(1, 'a');
1846
+ * mm.add(1, 'b');
1847
+ * mm.add(2, 'c');
1848
+ * console.log([...mm.flatEntries()]); // [[1, 'a'], [1, 'b'], [2, 'c']];
307
1849
  */
308
1850
  flatEntries(): IterableIterator<[K, V]>;
309
1851
  /**
310
1852
  * Returns the entry with the smallest key.
311
1853
  * @remarks Time O(log n), Space O(1)
312
- * @example
313
- * const map = new TreeMultiMap([[1, ['a']], [2, ['b']]]);
314
- * map.first(); // [1, ['a']]
1854
+
1855
+
1856
+
1857
+
1858
+
1859
+
1860
+
1861
+
1862
+
1863
+
1864
+
1865
+
1866
+
1867
+
1868
+
1869
+
1870
+
1871
+
1872
+
1873
+
1874
+
1875
+
1876
+
1877
+
1878
+
1879
+
1880
+
1881
+
1882
+
1883
+
1884
+
1885
+
1886
+
1887
+
1888
+
1889
+
1890
+
1891
+
1892
+
1893
+
1894
+
1895
+
1896
+
1897
+
1898
+
1899
+
1900
+
1901
+
1902
+
1903
+
1904
+
1905
+
1906
+
1907
+
1908
+
1909
+
1910
+ * @example
1911
+ * // First entry
1912
+ * const mm = new TreeMultiMap<number, string>();
1913
+ * mm.add(3, 'c');
1914
+ * mm.add(1, 'a');
1915
+ * console.log(mm.first()?.[0]); // 1;
315
1916
  */
316
1917
  first(): [K, V[]] | undefined;
317
1918
  /**
318
1919
  * Returns the entry with the largest key.
319
1920
  * @remarks Time O(log n), Space O(1)
320
- * @example
321
- * const map = new TreeMultiMap([[1, ['a']], [2, ['b']]]);
322
- * map.last(); // [2, ['b']]
1921
+
1922
+
1923
+
1924
+
1925
+
1926
+
1927
+
1928
+
1929
+
1930
+
1931
+
1932
+
1933
+
1934
+
1935
+
1936
+
1937
+
1938
+
1939
+
1940
+
1941
+
1942
+
1943
+
1944
+
1945
+
1946
+
1947
+
1948
+
1949
+
1950
+
1951
+
1952
+
1953
+
1954
+
1955
+
1956
+
1957
+
1958
+
1959
+
1960
+
1961
+
1962
+
1963
+
1964
+
1965
+
1966
+
1967
+
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+ * @example
1978
+ * // Last entry
1979
+ * const mm = new TreeMultiMap<number, string>();
1980
+ * mm.add(1, 'a');
1981
+ * mm.add(3, 'c');
1982
+ * console.log(mm.last()?.[0]); // 3;
323
1983
  */
324
1984
  last(): [K, V[]] | undefined;
325
1985
  /**
326
1986
  * Removes and returns the entry with the smallest key.
327
1987
  * @remarks Time O(log n), Space O(1)
328
- * @example
329
- * const map = new TreeMultiMap([[1, ['a']], [2, ['b']]]);
330
- * map.pollFirst(); // [1, ['a']]
331
- * map.has(1); // false
1988
+
1989
+
1990
+
1991
+
1992
+
1993
+
1994
+
1995
+
1996
+
1997
+
1998
+
1999
+
2000
+
2001
+
2002
+
2003
+
2004
+
2005
+
2006
+
2007
+
2008
+
2009
+
2010
+
2011
+
2012
+ * @example
2013
+ * // Remove and return first
2014
+ * const mm = new TreeMultiMap<number, string>();
2015
+ * mm.add(2, 'b');
2016
+ * mm.add(1, 'a');
2017
+ * const first = mm.pollFirst();
2018
+ * console.log(first?.[0]); // 1;
2019
+ * console.log(mm.has(1)); // false;
332
2020
  */
333
2021
  pollFirst(): [K, V[]] | undefined;
334
2022
  /**
335
2023
  * Removes and returns the entry with the largest key.
336
2024
  * @remarks Time O(log n), Space O(1)
337
- * @example
338
- * const map = new TreeMultiMap([[1, ['a']], [2, ['b']]]);
339
- * map.pollLast(); // [2, ['b']]
340
- * map.has(2); // false
2025
+
2026
+
2027
+
2028
+
2029
+
2030
+
2031
+
2032
+
2033
+
2034
+
2035
+
2036
+
2037
+
2038
+
2039
+
2040
+
2041
+
2042
+
2043
+
2044
+
2045
+
2046
+
2047
+
2048
+
2049
+ * @example
2050
+ * // Remove and return last
2051
+ * const mm = new TreeMultiMap<number, string>();
2052
+ * mm.add(1, 'a');
2053
+ * mm.add(3, 'c');
2054
+ * const last = mm.pollLast();
2055
+ * console.log(last?.[0]); // 3;
341
2056
  */
342
2057
  pollLast(): [K, V[]] | undefined;
343
2058
  /**
344
2059
  * Returns the entry with the smallest key >= given key.
345
2060
  * @remarks Time O(log n), Space O(1)
346
- * @example
347
- * const map = new TreeMultiMap([[10, ['a']], [20, ['b']], [30, ['c']]]);
348
- * map.ceiling(15); // [20, ['b']]
349
- * map.ceiling(20); // [20, ['b']]
2061
+
2062
+
2063
+
2064
+
2065
+
2066
+
2067
+
2068
+
2069
+
2070
+
2071
+
2072
+
2073
+
2074
+
2075
+
2076
+
2077
+
2078
+
2079
+
2080
+
2081
+
2082
+
2083
+
2084
+
2085
+
2086
+
2087
+
2088
+
2089
+
2090
+
2091
+
2092
+
2093
+
2094
+
2095
+
2096
+
2097
+
2098
+
2099
+
2100
+
2101
+
2102
+
2103
+
2104
+
2105
+
2106
+
2107
+
2108
+
2109
+
2110
+
2111
+
2112
+
2113
+
2114
+
2115
+
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+
2127
+
2128
+
2129
+
2130
+
2131
+
2132
+
2133
+
2134
+
2135
+
2136
+
2137
+
2138
+
2139
+
2140
+
2141
+
2142
+
2143
+
2144
+
2145
+
2146
+
2147
+
2148
+
2149
+
2150
+
2151
+
2152
+
2153
+
2154
+
2155
+
2156
+
2157
+
2158
+
2159
+
2160
+
2161
+
2162
+
2163
+
2164
+
2165
+
2166
+
2167
+
2168
+
2169
+
2170
+
2171
+
2172
+
2173
+
2174
+
2175
+
2176
+
2177
+
2178
+
2179
+
2180
+
2181
+
2182
+
2183
+
2184
+
2185
+
2186
+
2187
+
2188
+
2189
+
2190
+
2191
+
2192
+
2193
+
2194
+
2195
+
2196
+
2197
+
2198
+
2199
+
2200
+
2201
+
2202
+
2203
+
2204
+
2205
+
2206
+
2207
+ * @example
2208
+ * // Least key ≥ target
2209
+ * const mm = new TreeMultiMap<number, string>();
2210
+ * mm.add(10, 'a');
2211
+ * mm.add(20, 'b');
2212
+ * mm.add(30, 'c');
2213
+ * console.log(mm.ceiling(15)?.[0]); // 20;
350
2214
  */
351
2215
  ceiling(key: K): [K, V[]] | undefined;
352
2216
  /**
353
2217
  * Returns the entry with the largest key <= given key.
354
2218
  * @remarks Time O(log n), Space O(1)
355
- * @example
356
- * const map = new TreeMultiMap([[10, ['a']], [20, ['b']], [30, ['c']]]);
357
- * map.floor(25); // [20, ['b']]
358
- * map.floor(20); // [20, ['b']]
2219
+
2220
+
2221
+
2222
+
2223
+
2224
+
2225
+
2226
+
2227
+
2228
+
2229
+
2230
+
2231
+
2232
+
2233
+
2234
+
2235
+
2236
+
2237
+
2238
+
2239
+
2240
+
2241
+
2242
+
2243
+
2244
+
2245
+
2246
+
2247
+
2248
+
2249
+
2250
+
2251
+
2252
+
2253
+
2254
+
2255
+
2256
+
2257
+
2258
+
2259
+
2260
+
2261
+
2262
+
2263
+
2264
+
2265
+
2266
+
2267
+
2268
+
2269
+
2270
+
2271
+
2272
+
2273
+
2274
+
2275
+
2276
+
2277
+
2278
+
2279
+
2280
+
2281
+
2282
+
2283
+
2284
+
2285
+
2286
+
2287
+
2288
+
2289
+
2290
+
2291
+
2292
+
2293
+
2294
+
2295
+
2296
+
2297
+
2298
+
2299
+
2300
+
2301
+
2302
+
2303
+
2304
+
2305
+
2306
+
2307
+
2308
+
2309
+
2310
+
2311
+
2312
+
2313
+
2314
+
2315
+
2316
+
2317
+
2318
+
2319
+
2320
+
2321
+
2322
+
2323
+
2324
+
2325
+
2326
+
2327
+
2328
+
2329
+
2330
+
2331
+
2332
+
2333
+
2334
+
2335
+
2336
+
2337
+
2338
+
2339
+
2340
+
2341
+
2342
+
2343
+
2344
+
2345
+
2346
+
2347
+
2348
+
2349
+
2350
+
2351
+
2352
+
2353
+
2354
+
2355
+
2356
+
2357
+
2358
+
2359
+
2360
+
2361
+
2362
+
2363
+
2364
+
2365
+ * @example
2366
+ * // Greatest key ≤ target
2367
+ * const mm = new TreeMultiMap<number, string>();
2368
+ * mm.add(10, 'a');
2369
+ * mm.add(20, 'b');
2370
+ * mm.add(30, 'c');
2371
+ * console.log(mm.floor(25)?.[0]); // 20;
359
2372
  */
360
2373
  floor(key: K): [K, V[]] | undefined;
361
2374
  /**
362
2375
  * Returns the entry with the smallest key > given key.
363
2376
  * @remarks Time O(log n), Space O(1)
364
- * @example
365
- * const map = new TreeMultiMap([[10, ['a']], [20, ['b']], [30, ['c']]]);
366
- * map.higher(10); // [20, ['b']]
367
- * map.higher(15); // [20, ['b']]
2377
+
2378
+
2379
+
2380
+
2381
+
2382
+
2383
+
2384
+
2385
+
2386
+
2387
+
2388
+
2389
+
2390
+
2391
+
2392
+
2393
+
2394
+
2395
+
2396
+
2397
+
2398
+
2399
+
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+
2406
+
2407
+
2408
+
2409
+
2410
+
2411
+
2412
+
2413
+
2414
+
2415
+
2416
+
2417
+
2418
+
2419
+
2420
+
2421
+
2422
+
2423
+
2424
+
2425
+
2426
+
2427
+
2428
+
2429
+
2430
+
2431
+
2432
+
2433
+
2434
+
2435
+
2436
+
2437
+
2438
+
2439
+
2440
+
2441
+
2442
+
2443
+
2444
+
2445
+
2446
+
2447
+
2448
+
2449
+
2450
+
2451
+
2452
+
2453
+
2454
+
2455
+
2456
+
2457
+
2458
+
2459
+
2460
+
2461
+
2462
+
2463
+
2464
+
2465
+
2466
+
2467
+
2468
+
2469
+
2470
+
2471
+
2472
+
2473
+
2474
+
2475
+
2476
+
2477
+
2478
+
2479
+
2480
+
2481
+
2482
+
2483
+
2484
+
2485
+
2486
+
2487
+
2488
+
2489
+
2490
+
2491
+ * @example
2492
+ * // Least key > target
2493
+ * const mm = new TreeMultiMap<number, string>();
2494
+ * mm.add(10, 'a');
2495
+ * mm.add(20, 'b');
2496
+ * console.log(mm.higher(10)?.[0]); // 20;
368
2497
  */
369
2498
  higher(key: K): [K, V[]] | undefined;
370
2499
  /**
371
2500
  * Returns the entry with the largest key < given key.
372
2501
  * @remarks Time O(log n), Space O(1)
373
- * @example
374
- * const map = new TreeMultiMap([[10, ['a']], [20, ['b']], [30, ['c']]]);
375
- * map.lower(20); // [10, ['a']]
376
- * map.lower(15); // [10, ['a']]
2502
+
2503
+
2504
+
2505
+
2506
+
2507
+
2508
+
2509
+
2510
+
2511
+
2512
+
2513
+
2514
+
2515
+
2516
+
2517
+
2518
+
2519
+
2520
+
2521
+
2522
+
2523
+
2524
+
2525
+
2526
+
2527
+
2528
+
2529
+
2530
+
2531
+
2532
+
2533
+
2534
+
2535
+
2536
+
2537
+
2538
+
2539
+
2540
+
2541
+
2542
+
2543
+
2544
+
2545
+
2546
+
2547
+
2548
+
2549
+
2550
+
2551
+
2552
+
2553
+
2554
+
2555
+
2556
+
2557
+
2558
+
2559
+
2560
+
2561
+
2562
+
2563
+
2564
+
2565
+
2566
+
2567
+
2568
+
2569
+
2570
+
2571
+
2572
+
2573
+
2574
+
2575
+
2576
+
2577
+
2578
+
2579
+
2580
+
2581
+
2582
+
2583
+
2584
+
2585
+
2586
+
2587
+
2588
+
2589
+
2590
+
2591
+
2592
+
2593
+
2594
+
2595
+
2596
+
2597
+
2598
+
2599
+
2600
+
2601
+
2602
+
2603
+
2604
+
2605
+
2606
+
2607
+
2608
+
2609
+
2610
+
2611
+
2612
+
2613
+
2614
+
2615
+
2616
+ * @example
2617
+ * // Greatest key < target
2618
+ * const mm = new TreeMultiMap<number, string>();
2619
+ * mm.add(10, 'a');
2620
+ * mm.add(20, 'b');
2621
+ * console.log(mm.lower(20)?.[0]); // 10;
377
2622
  */
378
2623
  lower(key: K): [K, V[]] | undefined;
379
2624
  /**
380
2625
  * Prints the internal tree structure (for debugging).
381
2626
  * @remarks Time O(n), Space O(n)
2627
+
2628
+
2629
+
2630
+
2631
+
2632
+
2633
+
2634
+
2635
+
2636
+
2637
+
2638
+
2639
+
2640
+
2641
+
2642
+
2643
+
2644
+
2645
+
2646
+
2647
+
2648
+
2649
+
2650
+
2651
+
2652
+
2653
+
2654
+
2655
+
2656
+
2657
+
2658
+
2659
+
2660
+
2661
+
2662
+
2663
+
2664
+
2665
+
2666
+
2667
+
2668
+
2669
+
2670
+
2671
+
2672
+
2673
+
2674
+
2675
+
2676
+
2677
+
2678
+
2679
+
2680
+
2681
+
2682
+
2683
+
2684
+
2685
+
2686
+
2687
+
2688
+
2689
+
2690
+
2691
+
2692
+
2693
+
2694
+
2695
+
2696
+
2697
+
2698
+
2699
+
2700
+
2701
+
2702
+
2703
+
2704
+
2705
+
2706
+
2707
+
2708
+
2709
+
2710
+
2711
+
2712
+
2713
+
2714
+
2715
+
2716
+
2717
+
2718
+
2719
+
2720
+
2721
+
2722
+
2723
+
2724
+
2725
+
2726
+
2727
+
2728
+
2729
+
2730
+
2731
+
2732
+
2733
+
2734
+
2735
+
2736
+
2737
+
2738
+
2739
+
2740
+
2741
+
2742
+
2743
+
2744
+
2745
+
2746
+
2747
+
2748
+
2749
+
2750
+
2751
+
2752
+
2753
+
2754
+
2755
+
2756
+
2757
+
2758
+
2759
+
2760
+
2761
+
2762
+
2763
+
2764
+
2765
+
2766
+
2767
+
2768
+
2769
+
2770
+ * @example
2771
+ * // Display tree
2772
+ * const mm = new TreeMultiMap<number, string>();
2773
+ * mm.add(1, 'a');
2774
+ * expect(() => mm.print()).not.toThrow();
382
2775
  */
383
2776
  print(): void;
384
2777
  /**
385
2778
  * Executes a callback for each entry.
386
2779
  * @remarks Time O(n), Space O(1)
2780
+
2781
+
2782
+
2783
+
2784
+
2785
+
2786
+
2787
+
2788
+
2789
+
2790
+
2791
+
2792
+
2793
+
2794
+
2795
+
2796
+
2797
+
2798
+
2799
+
2800
+
2801
+
2802
+
2803
+
2804
+
2805
+
2806
+
2807
+
2808
+
2809
+
2810
+
2811
+
2812
+
2813
+
2814
+
2815
+
2816
+
2817
+
2818
+
2819
+
2820
+
2821
+
2822
+
2823
+
2824
+
2825
+
2826
+
2827
+
2828
+
2829
+
2830
+
2831
+
2832
+
2833
+
2834
+
2835
+
2836
+
2837
+
2838
+
2839
+
2840
+
2841
+
2842
+
2843
+
2844
+
2845
+
2846
+
2847
+
2848
+
2849
+
2850
+
2851
+
2852
+
2853
+
2854
+
2855
+
2856
+
2857
+
2858
+
2859
+
2860
+
2861
+
2862
+
2863
+
2864
+
2865
+
2866
+
2867
+
2868
+
2869
+
2870
+
2871
+
2872
+
2873
+
2874
+
2875
+
2876
+
2877
+
2878
+
2879
+
2880
+
2881
+
2882
+
2883
+
2884
+
2885
+
2886
+
2887
+
2888
+
2889
+
2890
+
2891
+
2892
+
2893
+
2894
+
2895
+
2896
+
2897
+
2898
+
2899
+
2900
+
2901
+
2902
+
2903
+
2904
+
2905
+
2906
+
2907
+
2908
+
2909
+
2910
+
2911
+
2912
+
2913
+
2914
+
2915
+
2916
+
2917
+
2918
+
2919
+
2920
+
2921
+
2922
+
2923
+ * @example
2924
+ * // Iterate entries
2925
+ * const mm = new TreeMultiMap<number, string>();
2926
+ * mm.add(1, 'a');
2927
+ * mm.add(2, 'b');
2928
+ * const keys: number[] = [];
2929
+ * mm.forEach((v, k) => keys.push(k));
2930
+ * console.log(keys); // [1, 2];
387
2931
  */
388
2932
  forEach(callback: (value: V[], key: K, map: this) => void): void;
389
2933
  /**
390
2934
  * Creates a new map with entries that pass the predicate.
391
2935
  * @remarks Time O(n), Space O(n)
2936
+
2937
+
2938
+
2939
+
2940
+
2941
+
2942
+
2943
+
2944
+
2945
+
2946
+
2947
+
2948
+
2949
+
2950
+
2951
+
2952
+
2953
+
2954
+
2955
+
2956
+
2957
+
2958
+
2959
+
2960
+
2961
+
2962
+
2963
+
2964
+
2965
+
2966
+
2967
+
2968
+
2969
+
2970
+
2971
+
2972
+
2973
+
2974
+
2975
+
2976
+
2977
+
2978
+
2979
+
2980
+
2981
+
2982
+
2983
+
2984
+
2985
+
2986
+
2987
+
2988
+
2989
+
2990
+
2991
+
2992
+
2993
+
2994
+
2995
+
2996
+
2997
+
2998
+
2999
+
3000
+
3001
+
3002
+
3003
+
3004
+
3005
+
3006
+
3007
+
3008
+
3009
+
3010
+
3011
+
3012
+
3013
+
3014
+
3015
+
3016
+
3017
+
3018
+
3019
+
3020
+
3021
+
3022
+
3023
+
3024
+
3025
+
3026
+
3027
+
3028
+
3029
+
3030
+
3031
+
3032
+
3033
+
3034
+
3035
+
3036
+
3037
+
3038
+
3039
+
3040
+
3041
+
3042
+
3043
+
3044
+
3045
+
3046
+
3047
+
3048
+
3049
+
3050
+
3051
+
3052
+
3053
+
3054
+
3055
+
3056
+
3057
+
3058
+
3059
+
3060
+
3061
+
3062
+
3063
+
3064
+
3065
+
3066
+
3067
+
3068
+
3069
+
3070
+
3071
+
3072
+
3073
+
3074
+
3075
+
3076
+
3077
+
3078
+
3079
+ * @example
3080
+ * // Filter entries
3081
+ * const mm = new TreeMultiMap<number, string>();
3082
+ * mm.add(1, 'a');
3083
+ * mm.add(2, 'b');
3084
+ * mm.add(3, 'c');
3085
+ * const filtered = mm.filter((v, k) => k > 1);
3086
+ * console.log([...filtered.keys()]); // [2, 3];
392
3087
  */
393
3088
  filter(predicate: (value: V[], key: K, map: this) => boolean): TreeMultiMap<K, V, R>;
394
3089
  /**
395
3090
  * Creates a new map by transforming each entry.
396
3091
  * @remarks Time O(n log n), Space O(n)
3092
+
3093
+
3094
+
3095
+
3096
+
3097
+
3098
+
3099
+
3100
+
3101
+
3102
+
3103
+
3104
+
3105
+
3106
+
3107
+
3108
+
3109
+
3110
+
3111
+
3112
+
3113
+
3114
+
3115
+
3116
+
3117
+
3118
+
3119
+
3120
+
3121
+
3122
+
3123
+
3124
+
3125
+
3126
+
3127
+
3128
+
3129
+
3130
+
3131
+
3132
+
3133
+
3134
+
3135
+
3136
+
3137
+
3138
+
3139
+
3140
+
3141
+
3142
+
3143
+
3144
+
3145
+
3146
+
3147
+
3148
+
3149
+
3150
+
3151
+
3152
+
3153
+
3154
+
3155
+
3156
+
3157
+
3158
+
3159
+
3160
+
3161
+
3162
+
3163
+
3164
+
3165
+
3166
+
3167
+
3168
+
3169
+
3170
+
3171
+
3172
+
3173
+
3174
+
3175
+
3176
+
3177
+
3178
+
3179
+
3180
+
3181
+
3182
+
3183
+
3184
+
3185
+
3186
+
3187
+
3188
+
3189
+
3190
+
3191
+
3192
+
3193
+
3194
+
3195
+
3196
+
3197
+
3198
+
3199
+
3200
+
3201
+
3202
+
3203
+
3204
+
3205
+
3206
+
3207
+
3208
+
3209
+
3210
+
3211
+
3212
+
3213
+
3214
+
3215
+
3216
+
3217
+
3218
+
3219
+
3220
+
3221
+
3222
+
3223
+
3224
+
3225
+
3226
+
3227
+
3228
+
3229
+
3230
+
3231
+
3232
+
3233
+
3234
+
3235
+ * @example
3236
+ * // Transform values
3237
+ * const mm = new TreeMultiMap<number, string>();
3238
+ * mm.add(1, 'a');
3239
+ * const mapped = mm.map((v, k) => [k, v.map(s => s.toUpperCase())] as [number, string[]]);
3240
+ * console.log(mapped.get(1)); // ['A'];
397
3241
  */
398
3242
  map<V2>(mapper: (value: V[], key: K, map: this) => [K, V2[]]): TreeMultiMap<K, V2, R>;
399
3243
  /**
400
3244
  * Reduces all entries to a single value.
401
3245
  * @remarks Time O(n), Space O(1)
3246
+
3247
+
3248
+
3249
+
3250
+
3251
+
3252
+
3253
+
3254
+
3255
+
3256
+
3257
+
3258
+
3259
+
3260
+
3261
+
3262
+
3263
+
3264
+
3265
+
3266
+
3267
+
3268
+
3269
+
3270
+
3271
+
3272
+
3273
+
3274
+
3275
+
3276
+
3277
+
3278
+
3279
+
3280
+
3281
+
3282
+
3283
+
3284
+
3285
+
3286
+
3287
+
3288
+
3289
+
3290
+
3291
+
3292
+
3293
+
3294
+
3295
+
3296
+
3297
+
3298
+
3299
+
3300
+
3301
+
3302
+
3303
+
3304
+
3305
+
3306
+
3307
+
3308
+
3309
+
3310
+
3311
+
3312
+
3313
+
3314
+
3315
+
3316
+
3317
+
3318
+
3319
+
3320
+
3321
+
3322
+
3323
+
3324
+
3325
+
3326
+
3327
+
3328
+
3329
+
3330
+
3331
+
3332
+
3333
+
3334
+
3335
+
3336
+
3337
+
3338
+
3339
+
3340
+
3341
+
3342
+
3343
+
3344
+
3345
+
3346
+
3347
+
3348
+
3349
+
3350
+
3351
+
3352
+
3353
+
3354
+
3355
+
3356
+
3357
+
3358
+
3359
+
3360
+
3361
+
3362
+
3363
+
3364
+
3365
+
3366
+
3367
+
3368
+
3369
+
3370
+
3371
+
3372
+
3373
+
3374
+
3375
+
3376
+
3377
+
3378
+
3379
+
3380
+
3381
+
3382
+
3383
+
3384
+
3385
+
3386
+
3387
+
3388
+
3389
+ * @example
3390
+ * // Aggregate
3391
+ * const mm = new TreeMultiMap<number, number>();
3392
+ * mm.add(1, 10);
3393
+ * mm.add(2, 20);
3394
+ * const sum = mm.reduce((acc, v) => acc + v.reduce((a, b) => a + b, 0), 0);
3395
+ * console.log(sum); // 30;
402
3396
  */
403
3397
  reduce<U>(callback: (accumulator: U, value: V[], key: K, map: this) => U, initialValue: U): U;
404
3398
  /**
405
3399
  * Sets multiple entries at once.
406
3400
  * @remarks Time O(m log n), Space O(m) where m is input size
3401
+
3402
+
3403
+
3404
+
3405
+
3406
+
3407
+
3408
+
3409
+
3410
+
3411
+
3412
+
3413
+
3414
+
3415
+
3416
+
3417
+
3418
+
3419
+
3420
+
3421
+
3422
+
3423
+
3424
+
3425
+
3426
+
3427
+
3428
+
3429
+
3430
+
3431
+
3432
+
3433
+
3434
+
3435
+
3436
+
3437
+
3438
+
3439
+
3440
+
3441
+
3442
+
3443
+
3444
+
3445
+
3446
+
3447
+
3448
+
3449
+
3450
+
3451
+
3452
+
3453
+
3454
+
3455
+
3456
+
3457
+
3458
+
3459
+
3460
+
3461
+
3462
+
3463
+
3464
+
3465
+
3466
+
3467
+
3468
+
3469
+
3470
+
3471
+
3472
+
3473
+
3474
+
3475
+
3476
+
3477
+
3478
+
3479
+
3480
+
3481
+
3482
+
3483
+
3484
+
3485
+
3486
+
3487
+
3488
+
3489
+
3490
+
3491
+
3492
+
3493
+
3494
+
3495
+
3496
+
3497
+
3498
+
3499
+
3500
+
3501
+
3502
+
3503
+
3504
+
3505
+
3506
+
3507
+
3508
+
3509
+
3510
+
3511
+
3512
+
3513
+
3514
+
3515
+
3516
+
3517
+
3518
+
3519
+
3520
+
3521
+
3522
+
3523
+
3524
+
3525
+
3526
+
3527
+
3528
+
3529
+
3530
+
3531
+
3532
+
3533
+
3534
+
3535
+
3536
+ * @example
3537
+ * // Set multiple entries
3538
+ * const mm = new TreeMultiMap<number, string>();
3539
+ * mm.setMany([[1, ['a']], [2, ['b']]]);
3540
+ * console.log(mm.size); // 2;
407
3541
  */
408
3542
  setMany(keysNodesEntriesOrRaws: Iterable<K | [K | null | undefined, V[] | undefined]>): boolean[];
409
3543
  /**
410
3544
  * Searches for entries within a key range.
411
3545
  * @remarks Time O(log n + k), Space O(k) where k is result size
3546
+
3547
+
3548
+
3549
+
3550
+
3551
+
3552
+
3553
+
3554
+
3555
+
3556
+
3557
+
3558
+
3559
+
3560
+
3561
+
3562
+
3563
+
3564
+
3565
+
3566
+
3567
+
3568
+
3569
+
3570
+
3571
+
3572
+
3573
+
3574
+
3575
+
3576
+
3577
+
3578
+
3579
+
3580
+
3581
+
3582
+
3583
+
3584
+
3585
+
3586
+
3587
+
3588
+
3589
+
3590
+
3591
+
3592
+
3593
+
3594
+
3595
+
3596
+
3597
+
3598
+
3599
+
3600
+
3601
+
3602
+
3603
+
3604
+
3605
+
3606
+
3607
+
3608
+
3609
+
3610
+
3611
+
3612
+
3613
+
3614
+
3615
+
3616
+
3617
+
3618
+
3619
+
3620
+
3621
+
3622
+
3623
+
3624
+
3625
+
3626
+
3627
+
3628
+
3629
+
3630
+
3631
+
3632
+
3633
+
3634
+
3635
+
3636
+
3637
+
3638
+
3639
+
3640
+
3641
+
3642
+
3643
+
3644
+
3645
+
3646
+
3647
+
3648
+
3649
+
3650
+
3651
+
3652
+
3653
+
3654
+
3655
+
3656
+
3657
+
3658
+
3659
+
3660
+ * @example
3661
+ * // Find keys in range
3662
+ * const mm = new TreeMultiMap<number, string>();
3663
+ * mm.add(10, 'a');
3664
+ * mm.add(20, 'b');
3665
+ * mm.add(30, 'c');
3666
+ * const result = mm.rangeSearch([15, 25]);
3667
+ * console.log(result.length); // 1;
412
3668
  */
413
3669
  rangeSearch<C extends (node: RedBlackTreeNode<K, V[]>) => unknown>(range: Range<K> | [K, K], callback?: C): ReturnType<C>[];
414
3670
  /**
415
3671
  * Creates a shallow clone of this map.
416
3672
  * @remarks Time O(n log n), Space O(n)
3673
+
3674
+
3675
+
3676
+
3677
+
3678
+
3679
+
3680
+
3681
+
3682
+
3683
+
3684
+
3685
+
3686
+
3687
+
3688
+
3689
+
3690
+
3691
+
3692
+
3693
+
3694
+
3695
+
3696
+
3697
+
3698
+
3699
+
3700
+
3701
+
3702
+
3703
+
3704
+
3705
+
3706
+
3707
+
3708
+
3709
+
3710
+
3711
+
3712
+
3713
+
3714
+
3715
+
3716
+
3717
+
3718
+
3719
+
3720
+
3721
+
3722
+
3723
+
3724
+
3725
+
3726
+
3727
+
3728
+
3729
+
3730
+
3731
+
3732
+
3733
+
3734
+
3735
+
3736
+
3737
+
3738
+
3739
+
3740
+
3741
+
3742
+
3743
+
3744
+
3745
+
3746
+
3747
+
3748
+
3749
+
3750
+
3751
+
3752
+
3753
+
3754
+
3755
+
3756
+
3757
+
3758
+
3759
+
3760
+
3761
+
3762
+
3763
+
3764
+
3765
+
3766
+
3767
+
3768
+
3769
+
3770
+
3771
+
3772
+
3773
+
3774
+
3775
+
3776
+
3777
+
3778
+
3779
+
3780
+
3781
+
3782
+
3783
+
3784
+
3785
+
3786
+
3787
+
3788
+
3789
+
3790
+
3791
+
3792
+
3793
+
3794
+
3795
+
3796
+
3797
+
3798
+
3799
+
3800
+
3801
+
3802
+
3803
+
3804
+
3805
+
3806
+
3807
+
3808
+
3809
+
3810
+
3811
+
3812
+
3813
+
3814
+
3815
+
3816
+ * @example
3817
+ * // Deep clone
3818
+ * const mm = new TreeMultiMap<number, string>();
3819
+ * mm.add(1, 'a');
3820
+ * const copy = mm.clone();
3821
+ * copy.delete(1);
3822
+ * console.log(mm.has(1)); // true;
417
3823
  */
418
3824
  clone(): TreeMultiMap<K, V, R>;
419
3825
  /**