data-structure-typed 2.6.0 → 2.6.2

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 (160) hide show
  1. package/.github/workflows/ci.yml +7 -2
  2. package/.github/workflows/release-package.yml +9 -2
  3. package/CHANGELOG.md +9 -1
  4. package/dist/cjs/binary-tree.cjs +2927 -23688
  5. package/dist/cjs/graph.cjs +845 -2634
  6. package/dist/cjs/hash.cjs +185 -616
  7. package/dist/cjs/heap.cjs +266 -818
  8. package/dist/cjs/index.cjs +5116 -31358
  9. package/dist/cjs/linked-list.cjs +644 -2615
  10. package/dist/cjs/matrix.cjs +220 -535
  11. package/dist/cjs/priority-queue.cjs +266 -818
  12. package/dist/cjs/queue.cjs +637 -2343
  13. package/dist/cjs/stack.cjs +124 -530
  14. package/dist/cjs/trie.cjs +145 -592
  15. package/dist/cjs-legacy/binary-tree.cjs +4352 -25113
  16. package/dist/cjs-legacy/graph.cjs +847 -2636
  17. package/dist/cjs-legacy/hash.cjs +181 -612
  18. package/dist/cjs-legacy/heap.cjs +266 -818
  19. package/dist/cjs-legacy/index.cjs +6657 -32899
  20. package/dist/cjs-legacy/linked-list.cjs +640 -2611
  21. package/dist/cjs-legacy/matrix.cjs +220 -535
  22. package/dist/cjs-legacy/priority-queue.cjs +266 -818
  23. package/dist/cjs-legacy/queue.cjs +634 -2340
  24. package/dist/cjs-legacy/stack.cjs +124 -530
  25. package/dist/cjs-legacy/trie.cjs +145 -592
  26. package/dist/esm/binary-tree.mjs +2927 -23688
  27. package/dist/esm/graph.mjs +845 -2634
  28. package/dist/esm/hash.mjs +185 -616
  29. package/dist/esm/heap.mjs +266 -818
  30. package/dist/esm/index.mjs +5116 -31358
  31. package/dist/esm/linked-list.mjs +644 -2615
  32. package/dist/esm/matrix.mjs +220 -535
  33. package/dist/esm/priority-queue.mjs +266 -818
  34. package/dist/esm/queue.mjs +637 -2343
  35. package/dist/esm/stack.mjs +124 -530
  36. package/dist/esm/trie.mjs +145 -592
  37. package/dist/esm-legacy/binary-tree.mjs +4352 -25113
  38. package/dist/esm-legacy/graph.mjs +847 -2636
  39. package/dist/esm-legacy/hash.mjs +181 -612
  40. package/dist/esm-legacy/heap.mjs +266 -818
  41. package/dist/esm-legacy/index.mjs +6657 -32899
  42. package/dist/esm-legacy/linked-list.mjs +640 -2611
  43. package/dist/esm-legacy/matrix.mjs +220 -535
  44. package/dist/esm-legacy/priority-queue.mjs +266 -818
  45. package/dist/esm-legacy/queue.mjs +634 -2340
  46. package/dist/esm-legacy/stack.mjs +124 -530
  47. package/dist/esm-legacy/trie.mjs +145 -592
  48. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +29 -500
  49. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +38 -563
  50. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +230 -1212
  51. package/dist/types/data-structures/binary-tree/bst.d.ts +124 -1063
  52. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +99 -854
  53. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +62 -314
  54. package/dist/types/data-structures/binary-tree/tree-map.d.ts +366 -5057
  55. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +277 -4885
  56. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +253 -3929
  57. package/dist/types/data-structures/binary-tree/tree-set.d.ts +261 -4782
  58. package/dist/types/data-structures/graph/abstract-graph.d.ts +44 -44
  59. package/dist/types/data-structures/graph/directed-graph.d.ts +130 -527
  60. package/dist/types/data-structures/graph/undirected-graph.d.ts +125 -482
  61. package/dist/types/data-structures/hash/hash-map.d.ts +132 -562
  62. package/dist/types/data-structures/heap/heap.d.ts +194 -746
  63. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +120 -809
  64. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +121 -733
  65. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +193 -863
  66. package/dist/types/data-structures/matrix/matrix.d.ts +159 -474
  67. package/dist/types/data-structures/priority-queue/max-priority-queue.d.ts +1 -6
  68. package/dist/types/data-structures/priority-queue/min-priority-queue.d.ts +6 -11
  69. package/dist/types/data-structures/priority-queue/priority-queue.d.ts +1 -1
  70. package/dist/types/data-structures/queue/deque.d.ts +196 -804
  71. package/dist/types/data-structures/queue/queue.d.ts +99 -585
  72. package/dist/types/data-structures/stack/stack.d.ts +75 -481
  73. package/dist/types/data-structures/trie/trie.d.ts +98 -584
  74. package/dist/umd/data-structure-typed.js +6580 -32822
  75. package/dist/umd/data-structure-typed.min.js +3 -3
  76. package/docs-site-docusaurus/docs/api/classes/AVLTree.md +162 -215
  77. package/docs-site-docusaurus/docs/api/classes/AVLTreeNode.md +9 -9
  78. package/docs-site-docusaurus/docs/api/classes/AbstractGraph.md +47 -47
  79. package/docs-site-docusaurus/docs/api/classes/BST.md +155 -208
  80. package/docs-site-docusaurus/docs/api/classes/BSTNode.md +7 -7
  81. package/docs-site-docusaurus/docs/api/classes/BinaryIndexedTree.md +13 -29
  82. package/docs-site-docusaurus/docs/api/classes/BinaryTree.md +104 -158
  83. package/docs-site-docusaurus/docs/api/classes/BinaryTreeNode.md +13 -13
  84. package/docs-site-docusaurus/docs/api/classes/Deque.md +253 -101
  85. package/docs-site-docusaurus/docs/api/classes/DirectedGraph.md +60 -80
  86. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedList.md +244 -114
  87. package/docs-site-docusaurus/docs/api/classes/DoublyLinkedListNode.md +6 -6
  88. package/docs-site-docusaurus/docs/api/classes/FibonacciHeap.md +9 -9
  89. package/docs-site-docusaurus/docs/api/classes/FibonacciHeapNode.md +1 -1
  90. package/docs-site-docusaurus/docs/api/classes/HashMap.md +52 -48
  91. package/docs-site-docusaurus/docs/api/classes/Heap.md +119 -64
  92. package/docs-site-docusaurus/docs/api/classes/IterableElementBase.md +84 -14
  93. package/docs-site-docusaurus/docs/api/classes/LinearBase.md +138 -34
  94. package/docs-site-docusaurus/docs/api/classes/LinearLinkedBase.md +149 -41
  95. package/docs-site-docusaurus/docs/api/classes/LinkedHashMap.md +23 -23
  96. package/docs-site-docusaurus/docs/api/classes/LinkedListQueue.md +172 -92
  97. package/docs-site-docusaurus/docs/api/classes/MapGraph.md +60 -80
  98. package/docs-site-docusaurus/docs/api/classes/Matrix.md +57 -52
  99. package/docs-site-docusaurus/docs/api/classes/MaxHeap.md +117 -62
  100. package/docs-site-docusaurus/docs/api/classes/MaxPriorityQueue.md +120 -70
  101. package/docs-site-docusaurus/docs/api/classes/MinHeap.md +117 -62
  102. package/docs-site-docusaurus/docs/api/classes/MinPriorityQueue.md +125 -75
  103. package/docs-site-docusaurus/docs/api/classes/PriorityQueue.md +119 -64
  104. package/docs-site-docusaurus/docs/api/classes/Queue.md +158 -74
  105. package/docs-site-docusaurus/docs/api/classes/RedBlackTree.md +171 -225
  106. package/docs-site-docusaurus/docs/api/classes/SegmentTree.md +10 -22
  107. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedList.md +172 -94
  108. package/docs-site-docusaurus/docs/api/classes/SinglyLinkedListNode.md +4 -4
  109. package/docs-site-docusaurus/docs/api/classes/SkipList.md +98 -75
  110. package/docs-site-docusaurus/docs/api/classes/Stack.md +112 -50
  111. package/docs-site-docusaurus/docs/api/classes/TreeMap.md +104 -129
  112. package/docs-site-docusaurus/docs/api/classes/TreeMultiMap.md +90 -121
  113. package/docs-site-docusaurus/docs/api/classes/TreeSet.md +298 -107
  114. package/docs-site-docusaurus/docs/api/classes/Trie.md +116 -58
  115. package/docs-site-docusaurus/docs/api/classes/TrieNode.md +8 -8
  116. package/docs-site-docusaurus/docs/api/classes/UndirectedGraph.md +59 -77
  117. package/package.json +45 -46
  118. package/src/common/error.ts +15 -32
  119. package/src/common/index.ts +0 -3
  120. package/src/data-structures/base/iterable-element-base.ts +0 -3
  121. package/src/data-structures/base/linear-base.ts +2 -36
  122. package/src/data-structures/binary-tree/avl-tree.ts +31 -529
  123. package/src/data-structures/binary-tree/binary-indexed-tree.ts +47 -572
  124. package/src/data-structures/binary-tree/binary-tree.ts +326 -1311
  125. package/src/data-structures/binary-tree/bst.ts +158 -1082
  126. package/src/data-structures/binary-tree/red-black-tree.ts +451 -1290
  127. package/src/data-structures/binary-tree/segment-tree.ts +73 -351
  128. package/src/data-structures/binary-tree/tree-map.ts +462 -5124
  129. package/src/data-structures/binary-tree/tree-multi-map.ts +302 -4914
  130. package/src/data-structures/binary-tree/tree-multi-set.ts +299 -3983
  131. package/src/data-structures/binary-tree/tree-set.ts +338 -4836
  132. package/src/data-structures/graph/abstract-graph.ts +98 -167
  133. package/src/data-structures/graph/directed-graph.ts +137 -562
  134. package/src/data-structures/graph/map-graph.ts +0 -3
  135. package/src/data-structures/graph/undirected-graph.ts +132 -511
  136. package/src/data-structures/hash/hash-map.ts +154 -582
  137. package/src/data-structures/heap/heap.ts +200 -795
  138. package/src/data-structures/linked-list/doubly-linked-list.ts +121 -865
  139. package/src/data-structures/linked-list/singly-linked-list.ts +122 -794
  140. package/src/data-structures/linked-list/skip-linked-list.ts +211 -918
  141. package/src/data-structures/matrix/matrix.ts +179 -518
  142. package/src/data-structures/matrix/navigator.ts +0 -1
  143. package/src/data-structures/priority-queue/max-priority-queue.ts +1 -6
  144. package/src/data-structures/priority-queue/min-priority-queue.ts +6 -11
  145. package/src/data-structures/priority-queue/priority-queue.ts +1 -2
  146. package/src/data-structures/queue/deque.ts +214 -882
  147. package/src/data-structures/queue/queue.ts +102 -625
  148. package/src/data-structures/stack/stack.ts +76 -505
  149. package/src/data-structures/trie/trie.ts +98 -628
  150. package/src/types/common.ts +0 -10
  151. package/src/types/data-structures/binary-tree/bst.ts +0 -7
  152. package/src/types/data-structures/binary-tree/red-black-tree.ts +0 -1
  153. package/src/types/data-structures/graph/abstract-graph.ts +0 -2
  154. package/src/types/data-structures/hash/hash-map.ts +0 -3
  155. package/src/types/data-structures/hash/index.ts +0 -1
  156. package/src/types/data-structures/matrix/navigator.ts +0 -2
  157. package/src/types/utils/utils.ts +0 -7
  158. package/src/types/utils/validate-type.ts +0 -7
  159. package/src/utils/number.ts +0 -2
  160. package/src/utils/utils.ts +0 -5
@@ -39,1837 +39,149 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
39
39
  */
40
40
  constructor(keysNodesEntriesOrRaws?: Iterable<K | [K | null | undefined, V[] | undefined] | null | undefined | R>, options?: TreeMultiMapOptions<K, V[], R>);
41
41
  /**
42
- * Validates the key against the default comparator rules.
42
+ * Number of distinct keys.
43
43
  * @remarks Time O(1), Space O(1)
44
44
  */
45
- private _validateKey;
45
+ get size(): number;
46
46
  /**
47
- * Number of distinct keys.
47
+ * Total number of values across all buckets (Σ bucket.length).
48
+ * @remarks Time O(n), Space O(1)
49
+ * @example
50
+ * // Total number of values
51
+ * const mm = new TreeMultiMap<number, string>();
52
+ * mm.add(1, 'a');
53
+ * mm.add(1, 'b');
54
+ * mm.add(2, 'c');
55
+ * console.log(mm.totalSize); // 3;
56
+ */
57
+ get totalSize(): number;
58
+ /**
59
+ * Expose comparator for advanced usage/testing (read-only).
48
60
  * @remarks Time O(1), Space O(1)
49
61
  */
50
- get size(): number;
62
+ get comparator(): Comparator<K>;
51
63
  /**
52
64
  * Whether the map is empty.
53
65
  * @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
-
198
-
199
-
200
-
201
-
202
-
203
-
204
-
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
- * @example
248
- * // Check if empty
249
- * console.log(new TreeMultiMap().isEmpty()); // true;
66
+ * @example
67
+ * // Check if empty
68
+ * console.log(new TreeMultiMap().isEmpty()); // true;
250
69
  */
251
70
  isEmpty(): boolean;
252
71
  /**
253
72
  * Removes all entries from the map.
254
73
  * @remarks Time O(1), Space O(1)
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
-
349
-
350
-
351
-
352
-
353
-
354
-
355
-
356
-
357
-
358
-
359
-
360
-
361
-
362
-
363
-
364
-
365
-
366
-
367
-
368
-
369
-
370
-
371
-
372
-
373
-
374
-
375
-
376
-
377
-
378
-
379
-
380
-
381
-
382
-
383
-
384
-
385
-
386
-
387
-
388
-
389
-
390
-
391
-
392
-
393
-
394
-
395
-
396
-
397
-
398
-
399
-
400
-
401
-
402
-
403
-
404
-
405
-
406
-
407
-
408
-
409
-
410
-
411
-
412
-
413
-
414
-
415
-
416
-
417
-
418
-
419
-
420
-
421
-
422
-
423
-
424
-
425
-
426
-
427
-
428
-
429
-
430
-
431
-
432
-
433
-
434
-
435
-
436
-
437
-
438
-
439
-
440
-
441
-
442
-
443
-
444
-
445
-
446
-
447
-
448
- * @example
449
- * // Remove all entries
450
- * const mm = new TreeMultiMap<number, string>();
451
- * mm.add(1, 'a');
452
- * mm.clear();
453
- * console.log(mm.isEmpty()); // true;
74
+ * @example
75
+ * // Remove all entries
76
+ * const mm = new TreeMultiMap<number, string>();
77
+ * mm.add(1, 'a');
78
+ * mm.clear();
79
+ * console.log(mm.isEmpty()); // true;
454
80
  */
455
81
  clear(): void;
456
82
  /**
457
83
  * Bucket length for a key (missing => 0).
458
84
  * @remarks Time O(log n), Space O(1)
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
- * @example
493
- * // Count values for key
494
- * const mm = new TreeMultiMap<number, string>();
495
- * mm.add(1, 'a');
496
- * mm.add(1, 'b');
497
- * console.log(mm.count(1)); // 2;
85
+ * @example
86
+ * // Count values for key
87
+ * const mm = new TreeMultiMap<number, string>();
88
+ * mm.add(1, 'a');
89
+ * mm.add(1, 'b');
90
+ * console.log(mm.count(1)); // 2;
498
91
  */
499
92
  count(key: K): number;
500
- /**
501
- * Total number of values across all buckets (Σ bucket.length).
502
- * @remarks Time O(n), Space O(1)
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
- * @example
537
- * // Total number of values
538
- * const mm = new TreeMultiMap<number, string>();
539
- * mm.add(1, 'a');
540
- * mm.add(1, 'b');
541
- * mm.add(2, 'c');
542
- * console.log(mm.totalSize); // 3;
543
- */
544
- get totalSize(): number;
545
93
  /**
546
94
  * Whether the map contains the given key.
547
95
  * @remarks Time O(log n), Space O(1)
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
-
607
-
608
-
609
-
610
-
611
-
612
-
613
-
614
-
615
-
616
-
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
- * @example
787
- * // Check key existence
788
- * const mm = new TreeMultiMap<number, string>();
789
- * mm.add(1, 'a');
790
- * console.log(mm.has(1)); // true;
791
- * console.log(mm.has(2)); // false;
96
+ * @example
97
+ * // Check key existence
98
+ * const mm = new TreeMultiMap<number, string>();
99
+ * mm.add(1, 'a');
100
+ * console.log(mm.has(1)); // true;
101
+ * console.log(mm.has(2)); // false;
792
102
  */
793
103
  has(key: K): boolean;
794
104
  /**
795
105
  * Live bucket reference (do not auto-delete key if bucket becomes empty via mutation).
796
106
  * @remarks Time O(log n), Space O(1)
797
-
798
-
799
-
800
-
801
-
802
-
803
-
804
-
805
-
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
-
944
-
945
-
946
-
947
-
948
-
949
-
950
-
951
-
952
-
953
-
954
-
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
- * @example
1036
- * // Get values for key
1037
- * const mm = new TreeMultiMap<number, string>();
1038
- * mm.add(1, 'a');
1039
- * mm.add(1, 'b');
1040
- * console.log(mm.get(1)); // ['a', 'b'];
107
+ * @example
108
+ * // Get values for key
109
+ * const mm = new TreeMultiMap<number, string>();
110
+ * mm.add(1, 'a');
111
+ * mm.add(1, 'b');
112
+ * console.log(mm.get(1)); // ['a', 'b'];
1041
113
  */
1042
114
  get(key: K): V[] | undefined;
1043
115
  /**
1044
116
  * Append a single value.
1045
117
  * @remarks Time O(log n), Space O(1)
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
-
1132
-
1133
-
1134
-
1135
-
1136
-
1137
-
1138
-
1139
-
1140
-
1141
-
1142
-
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
- * @example
1234
- * // Add key-value pair
1235
- * const mm = new TreeMultiMap<number, string>();
1236
- * mm.add(1, 'a');
1237
- * mm.add(1, 'b');
1238
- * mm.add(2, 'c');
1239
- * console.log(mm.get(1)); // ['a', 'b'];
118
+ * @example
119
+ * // Add key-value pair
120
+ * const mm = new TreeMultiMap<number, string>();
121
+ * mm.add(1, 'a');
122
+ * mm.add(1, 'b');
123
+ * mm.add(2, 'c');
124
+ * console.log(mm.get(1)); // ['a', 'b'];
1240
125
  */
1241
126
  add(key: K, value: V): boolean;
1242
127
  /**
1243
128
  * Alias for compatibility with existing TreeMultiMap semantics.
1244
129
  * @remarks Time O(log n), Space O(1) for single value; O(log n + m) for bucket append
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
-
1322
-
1323
-
1324
-
1325
-
1326
-
1327
-
1328
-
1329
-
1330
-
1331
-
1332
-
1333
-
1334
-
1335
-
1336
-
1337
-
1338
-
1339
-
1340
-
1341
-
1342
-
1343
-
1344
-
1345
-
1346
-
1347
-
1348
-
1349
-
1350
-
1351
-
1352
-
1353
-
1354
-
1355
-
1356
-
1357
-
1358
-
1359
-
1360
-
1361
-
1362
-
1363
-
1364
-
1365
-
1366
-
1367
-
1368
-
1369
-
1370
-
1371
-
1372
-
1373
-
1374
-
1375
-
1376
-
1377
-
1378
-
1379
-
1380
-
1381
-
1382
-
1383
-
1384
-
1385
-
1386
-
1387
-
1388
-
1389
-
1390
-
1391
-
1392
-
1393
-
1394
-
1395
-
1396
-
1397
-
1398
-
1399
-
1400
-
1401
-
1402
-
1403
-
1404
-
1405
-
1406
-
1407
-
1408
-
1409
-
1410
-
1411
-
1412
-
1413
-
1414
-
1415
-
1416
-
1417
-
1418
-
1419
-
1420
-
1421
-
1422
-
1423
-
1424
-
1425
-
1426
-
1427
-
1428
-
1429
-
1430
-
1431
-
1432
-
1433
-
1434
-
1435
-
1436
-
1437
-
1438
-
1439
-
1440
-
1441
-
1442
-
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
- * @example
1482
- * // Set values for key
1483
- * const mm = new TreeMultiMap<number, string>();
1484
- * mm.set(1, 'a');
1485
- * mm.set(1, 'b');
1486
- * console.log(mm.get(1)); // ['a', 'b'];
130
+ * @example
131
+ * // Set values for key
132
+ * const mm = new TreeMultiMap<number, string>();
133
+ * mm.set(1, 'a');
134
+ * mm.set(1, 'b');
135
+ * console.log(mm.get(1)); // ['a', 'b'];
1487
136
  */
1488
137
  set(entry: [K | null | undefined, V[] | undefined] | K | null | undefined, value?: V): boolean;
1489
138
  set(key: K, value: V): boolean;
1490
139
  /**
1491
140
  * Deletes a key and its entire bucket.
1492
141
  * @remarks Time O(log n), Space O(1)
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
-
1587
-
1588
-
1589
-
1590
-
1591
-
1592
-
1593
-
1594
-
1595
-
1596
-
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
- * @example
1732
- * // Remove key
1733
- * const mm = new TreeMultiMap<number, string>();
1734
- * mm.add(1, 'a');
1735
- * mm.add(2, 'b');
1736
- * mm.delete(1);
1737
- * console.log(mm.has(1)); // false;
142
+ * @example
143
+ * // Remove key
144
+ * const mm = new TreeMultiMap<number, string>();
145
+ * mm.add(1, 'a');
146
+ * mm.add(2, 'b');
147
+ * mm.delete(1);
148
+ * console.log(mm.has(1)); // false;
1738
149
  */
1739
150
  delete(key: K): boolean;
1740
151
  /**
1741
152
  * Check if a specific value exists in a key's bucket.
1742
153
  * @remarks Time O(log n + m), Space O(1) where m is bucket size
1743
-
1744
-
1745
-
1746
-
1747
-
1748
-
1749
-
1750
-
1751
-
1752
-
1753
-
1754
-
1755
-
1756
-
1757
-
1758
-
1759
-
1760
-
1761
-
1762
-
1763
-
1764
-
1765
-
1766
-
1767
-
1768
-
1769
-
1770
-
1771
-
1772
-
1773
-
1774
-
1775
-
1776
- * @example
1777
- * // Check specific key-value
1778
- * const mm = new TreeMultiMap<number, string>();
1779
- * mm.add(1, 'a');
1780
- * console.log(mm.hasEntry(1, 'a')); // true;
1781
- * console.log(mm.hasEntry(1, 'z')); // false;
154
+ * @example
155
+ * // Check specific key-value
156
+ * const mm = new TreeMultiMap<number, string>();
157
+ * mm.add(1, 'a');
158
+ * console.log(mm.hasEntry(1, 'a')); // true;
159
+ * console.log(mm.hasEntry(1, 'z')); // false;
1782
160
  */
1783
161
  hasEntry(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
1784
162
  /**
1785
163
  * Delete a single occurrence of a value from a key's bucket.
1786
164
  * @remarks Time O(log n + m), Space O(1) where m is bucket size
1787
-
1788
-
1789
-
1790
-
1791
-
1792
-
1793
-
1794
-
1795
-
1796
-
1797
-
1798
-
1799
-
1800
-
1801
-
1802
-
1803
-
1804
-
1805
-
1806
-
1807
-
1808
-
1809
-
1810
-
1811
-
1812
-
1813
-
1814
-
1815
-
1816
-
1817
-
1818
-
1819
-
1820
- * @example
1821
- * // Delete specific value
1822
- * const mm = new TreeMultiMap<number, string>();
1823
- * mm.add(1, 'a');
1824
- * mm.add(1, 'b');
1825
- * mm.deleteValue(1, 'a');
1826
- * console.log(mm.get(1)); // ['b'];
165
+ * @example
166
+ * // Delete specific value
167
+ * const mm = new TreeMultiMap<number, string>();
168
+ * mm.add(1, 'a');
169
+ * mm.add(1, 'b');
170
+ * mm.deleteValue(1, 'a');
171
+ * console.log(mm.get(1)); // ['b'];
1827
172
  */
1828
173
  deleteValue(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
1829
174
  /**
1830
175
  * Delete all occurrences of a value from a key's bucket.
1831
176
  * @remarks Time O(log n + m), Space O(1) where m is bucket size
1832
-
1833
-
1834
-
1835
-
1836
-
1837
-
1838
-
1839
-
1840
-
1841
-
1842
-
1843
-
1844
-
1845
-
1846
-
1847
-
1848
-
1849
-
1850
-
1851
-
1852
-
1853
-
1854
-
1855
-
1856
-
1857
-
1858
-
1859
-
1860
-
1861
-
1862
-
1863
-
1864
-
1865
- * @example
1866
- * // Delete all matching values
1867
- * const mm = new TreeMultiMap<number, string>();
1868
- * mm.add(1, 'a');
1869
- * mm.add(1, 'a');
1870
- * mm.add(1, 'b');
1871
- * const count = mm.deleteValues(1, 'a');
1872
- * console.log(count); // 2;
177
+ * @example
178
+ * // Delete all matching values
179
+ * const mm = new TreeMultiMap<number, string>();
180
+ * mm.add(1, 'a');
181
+ * mm.add(1, 'a');
182
+ * mm.add(1, 'b');
183
+ * const count = mm.deleteValues(1, 'a');
184
+ * console.log(count); // 2;
1873
185
  */
1874
186
  deleteValues(key: K, value: V, eq?: (a: V, b: V) => boolean): number;
1875
187
  /**
@@ -1880,3233 +192,313 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1880
192
  /**
1881
193
  * Iterates over all keys.
1882
194
  * @remarks Time O(n), Space O(1)
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
-
1911
-
1912
-
1913
-
1914
-
1915
-
1916
-
1917
-
1918
-
1919
-
1920
-
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
-
1978
-
1979
-
1980
-
1981
-
1982
-
1983
-
1984
-
1985
-
1986
-
1987
-
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
-
2013
-
2014
-
2015
-
2016
-
2017
-
2018
-
2019
-
2020
-
2021
-
2022
-
2023
-
2024
-
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
-
2050
-
2051
-
2052
-
2053
-
2054
-
2055
-
2056
-
2057
-
2058
-
2059
-
2060
-
2061
-
2062
-
2063
-
2064
-
2065
-
2066
-
2067
-
2068
-
2069
-
2070
-
2071
-
2072
-
2073
-
2074
-
2075
-
2076
- * @example
2077
- * // Iterate keys
2078
- * const mm = new TreeMultiMap<number, string>();
2079
- * mm.add(3, 'c');
2080
- * mm.add(1, 'a');
2081
- * console.log([...mm.keys()]); // [1, 3];
195
+ * @example
196
+ * // Iterate keys
197
+ * const mm = new TreeMultiMap<number, string>();
198
+ * mm.add(3, 'c');
199
+ * mm.add(1, 'a');
200
+ * console.log([...mm.keys()]); // [1, 3];
2082
201
  */
2083
202
  keys(): IterableIterator<K>;
2084
203
  /**
2085
204
  * Iterates over all buckets.
2086
205
  * @remarks Time O(n), Space O(1)
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
-
2208
-
2209
-
2210
-
2211
-
2212
-
2213
-
2214
-
2215
-
2216
-
2217
-
2218
-
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
- * @example
2281
- * // Iterate value arrays
2282
- * const mm = new TreeMultiMap<number, string>();
2283
- * mm.add(1, 'a');
2284
- * mm.add(1, 'b');
2285
- * console.log([...mm.values()]); // [['a', 'b']];
206
+ * @example
207
+ * // Iterate value arrays
208
+ * const mm = new TreeMultiMap<number, string>();
209
+ * mm.add(1, 'a');
210
+ * mm.add(1, 'b');
211
+ * console.log([...mm.values()]); // [['a', 'b']];
2286
212
  */
2287
213
  values(): IterableIterator<V[]>;
2288
214
  /**
2289
215
  * Iterate over all `[key, values[]]` entries (Map-compatible).
2290
216
  * @remarks Time O(n), Space O(1) per step.
2291
-
2292
-
2293
-
2294
-
2295
-
2296
-
2297
-
2298
-
2299
- * @example
2300
- * // Iterate over entries
2301
- * const mm = new TreeMultiMap<number, string>();
2302
- * mm.set(1, 'a');
2303
- * mm.set(1, 'b');
2304
- * mm.set(2, 'c');
2305
- * console.log([...mm.entries()]); // [
2306
- * // [1, ['a', 'b']],
2307
- * // [2, ['c']]
2308
- * // ];
217
+ * @example
218
+ * // Iterate over entries
219
+ * const mm = new TreeMultiMap<number, string>();
220
+ * mm.set(1, 'a');
221
+ * mm.set(1, 'b');
222
+ * mm.set(2, 'c');
223
+ * console.log([...mm.entries()]); // [
224
+ * // [1, ['a', 'b']],
225
+ * // [2, ['c']]
226
+ * // ];
2309
227
  */
2310
228
  entries(): IterableIterator<[K, V[]]>;
2311
229
  /**
2312
230
  * Iterates over all entries for a specific key.
2313
231
  * @remarks Time O(log n + m), Space O(1) where m is bucket size
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
- * @example
2348
- * // Get entries for key
2349
- * const mm = new TreeMultiMap<number, string>();
2350
- * mm.add(1, 'a');
2351
- * mm.add(1, 'b');
2352
- * console.log([...mm.entriesOf(1)]); // [[1, 'a'], [1, 'b']];
232
+ * @example
233
+ * // Get entries for key
234
+ * const mm = new TreeMultiMap<number, string>();
235
+ * mm.add(1, 'a');
236
+ * mm.add(1, 'b');
237
+ * console.log([...mm.entriesOf(1)]); // [
238
+ * // [1, 'a'],
239
+ * // [1, 'b']
240
+ * // ];
2353
241
  */
2354
242
  entriesOf(key: K): IterableIterator<[K, V]>;
2355
243
  /**
2356
244
  * Iterates over all values for a specific key.
2357
245
  * @remarks Time O(log n + m), Space O(1) where m is bucket size
2358
-
2359
-
2360
-
2361
-
2362
-
2363
-
2364
-
2365
-
2366
-
2367
-
2368
-
2369
-
2370
-
2371
-
2372
-
2373
-
2374
-
2375
-
2376
-
2377
-
2378
-
2379
-
2380
-
2381
-
2382
-
2383
-
2384
-
2385
-
2386
-
2387
-
2388
-
2389
-
2390
-
2391
- * @example
2392
- * // Get flat values for key
2393
- * const mm = new TreeMultiMap<number, string>();
2394
- * mm.add(1, 'a');
2395
- * mm.add(1, 'b');
2396
- * console.log([...mm.valuesOf(1)]); // ['a', 'b'];
246
+ * @example
247
+ * // Get flat values for key
248
+ * const mm = new TreeMultiMap<number, string>();
249
+ * mm.add(1, 'a');
250
+ * mm.add(1, 'b');
251
+ * console.log([...mm.valuesOf(1)]); // ['a', 'b'];
2397
252
  */
2398
253
  valuesOf(key: K): IterableIterator<V>;
2399
254
  /**
2400
255
  * Iterates over all [key, value] pairs (flattened from buckets).
2401
256
  * @remarks Time O(T), Space O(1) where T is totalSize
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
- * @example
2436
- * // All key-value pairs flattened
2437
- * const mm = new TreeMultiMap<number, string>();
2438
- * mm.add(1, 'a');
2439
- * mm.add(1, 'b');
2440
- * mm.add(2, 'c');
2441
- * console.log([...mm.flatEntries()]); // [[1, 'a'], [1, 'b'], [2, 'c']];
257
+ * @example
258
+ * // All key-value pairs flattened
259
+ * const mm = new TreeMultiMap<number, string>();
260
+ * mm.add(1, 'a');
261
+ * mm.add(1, 'b');
262
+ * mm.add(2, 'c');
263
+ * console.log([...mm.flatEntries()]); // [
264
+ * // [1, 'a'],
265
+ * // [1, 'b'],
266
+ * // [2, 'c']
267
+ * // ];
2442
268
  */
2443
269
  flatEntries(): IterableIterator<[K, V]>;
2444
270
  /**
2445
271
  * Returns the entry with the smallest key.
2446
272
  * @remarks Time O(log n), Space O(1)
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
-
2492
-
2493
-
2494
-
2495
-
2496
-
2497
-
2498
-
2499
-
2500
-
2501
-
2502
-
2503
-
2504
-
2505
-
2506
-
2507
-
2508
-
2509
-
2510
-
2511
-
2512
-
2513
-
2514
-
2515
-
2516
-
2517
-
2518
-
2519
-
2520
-
2521
-
2522
-
2523
- * @example
2524
- * // First entry
2525
- * const mm = new TreeMultiMap<number, string>();
2526
- * mm.add(3, 'c');
2527
- * mm.add(1, 'a');
2528
- * console.log(mm.first()?.[0]); // 1;
273
+ * @example
274
+ * // First entry
275
+ * const mm = new TreeMultiMap<number, string>();
276
+ * mm.add(3, 'c');
277
+ * mm.add(1, 'a');
278
+ * console.log(mm.first()?.[0]); // 1;
2529
279
  */
2530
280
  first(): [K, V[]] | undefined;
2531
281
  /**
2532
282
  * Returns the entry with the largest key.
2533
283
  * @remarks Time O(log n), Space O(1)
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
- * @example
2611
- * // Last entry
2612
- * const mm = new TreeMultiMap<number, string>();
2613
- * mm.add(1, 'a');
2614
- * mm.add(3, 'c');
2615
- * console.log(mm.last()?.[0]); // 3;
284
+ * @example
285
+ * // Last entry
286
+ * const mm = new TreeMultiMap<number, string>();
287
+ * mm.add(1, 'a');
288
+ * mm.add(3, 'c');
289
+ * console.log(mm.last()?.[0]); // 3;
2616
290
  */
2617
291
  last(): [K, V[]] | undefined;
2618
292
  /**
2619
293
  * Removes and returns the entry with the smallest key.
2620
294
  * @remarks Time O(log n), Space O(1)
2621
-
2622
-
2623
-
2624
-
2625
-
2626
-
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
- * @example
2656
- * // Remove and return first
2657
- * const mm = new TreeMultiMap<number, string>();
2658
- * mm.add(2, 'b');
2659
- * mm.add(1, 'a');
2660
- * const first = mm.pollFirst();
2661
- * console.log(first?.[0]); // 1;
2662
- * console.log(mm.has(1)); // false;
295
+ * @example
296
+ * // Remove and return first
297
+ * const mm = new TreeMultiMap<number, string>();
298
+ * mm.add(2, 'b');
299
+ * mm.add(1, 'a');
300
+ * const first = mm.pollFirst();
301
+ * console.log(first?.[0]); // 1;
302
+ * console.log(mm.has(1)); // false;
2663
303
  */
2664
304
  pollFirst(): [K, V[]] | undefined;
2665
305
  /**
2666
306
  * Removes and returns the entry with the largest key.
2667
307
  * @remarks Time O(log n), Space O(1)
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
- * @example
2703
- * // Remove and return last
2704
- * const mm = new TreeMultiMap<number, string>();
2705
- * mm.add(1, 'a');
2706
- * mm.add(3, 'c');
2707
- * const last = mm.pollLast();
2708
- * console.log(last?.[0]); // 3;
308
+ * @example
309
+ * // Remove and return last
310
+ * const mm = new TreeMultiMap<number, string>();
311
+ * mm.add(1, 'a');
312
+ * mm.add(3, 'c');
313
+ * const last = mm.pollLast();
314
+ * console.log(last?.[0]); // 3;
2709
315
  */
2710
316
  pollLast(): [K, V[]] | undefined;
2711
317
  /**
2712
318
  * Returns the entry with the smallest key >= given key.
2713
319
  * @remarks Time O(log n), Space O(1)
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
-
2771
-
2772
-
2773
-
2774
-
2775
-
2776
-
2777
-
2778
-
2779
-
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
- * @example
2911
- * // Least key ≥ target
2912
- * const mm = new TreeMultiMap<number, string>();
2913
- * mm.add(10, 'a');
2914
- * mm.add(20, 'b');
2915
- * mm.add(30, 'c');
2916
- * console.log(mm.ceiling(15)?.[0]); // 20;
320
+ * @example
321
+ * // Least key ≥ target
322
+ * const mm = new TreeMultiMap<number, string>();
323
+ * mm.add(10, 'a');
324
+ * mm.add(20, 'b');
325
+ * mm.add(30, 'c');
326
+ * console.log(mm.ceiling(15)?.[0]); // 20;
2917
327
  */
2918
328
  ceiling(key: K): [K, V[]] | undefined;
2919
329
  /**
2920
330
  * Returns the entry with the largest key <= given key.
2921
331
  * @remarks Time O(log n), Space O(1)
2922
-
2923
-
2924
-
2925
-
2926
-
2927
-
2928
-
2929
-
2930
-
2931
-
2932
-
2933
-
2934
-
2935
-
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
-
3080
-
3081
-
3082
-
3083
-
3084
-
3085
-
3086
-
3087
-
3088
-
3089
-
3090
-
3091
-
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
- * @example
3119
- * // Greatest key ≤ target
3120
- * const mm = new TreeMultiMap<number, string>();
3121
- * mm.add(10, 'a');
3122
- * mm.add(20, 'b');
3123
- * mm.add(30, 'c');
3124
- * console.log(mm.floor(25)?.[0]); // 20;
332
+ * @example
333
+ * // Greatest key ≤ target
334
+ * const mm = new TreeMultiMap<number, string>();
335
+ * mm.add(10, 'a');
336
+ * mm.add(20, 'b');
337
+ * mm.add(30, 'c');
338
+ * console.log(mm.floor(25)?.[0]); // 20;
3125
339
  */
3126
340
  floor(key: K): [K, V[]] | undefined;
3127
341
  /**
3128
342
  * Returns the entry with the smallest key > given key.
3129
343
  * @remarks Time O(log n), Space O(1)
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
-
3236
-
3237
-
3238
-
3239
-
3240
-
3241
-
3242
-
3243
-
3244
-
3245
-
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
- * @example
3285
- * // Least key > target
3286
- * const mm = new TreeMultiMap<number, string>();
3287
- * mm.add(10, 'a');
3288
- * mm.add(20, 'b');
3289
- * console.log(mm.higher(10)?.[0]); // 20;
344
+ * @example
345
+ * // Least key > target
346
+ * const mm = new TreeMultiMap<number, string>();
347
+ * mm.add(10, 'a');
348
+ * mm.add(20, 'b');
349
+ * console.log(mm.higher(10)?.[0]); // 20;
3290
350
  */
3291
351
  higher(key: K): [K, V[]] | undefined;
3292
352
  /**
3293
353
  * Returns the entry with the largest key < given key.
3294
354
  * @remarks Time O(log n), Space O(1)
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
-
3390
-
3391
-
3392
-
3393
-
3394
-
3395
-
3396
-
3397
-
3398
-
3399
-
3400
-
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
- * @example
3450
- * // Greatest key < target
3451
- * const mm = new TreeMultiMap<number, string>();
3452
- * mm.add(10, 'a');
3453
- * mm.add(20, 'b');
3454
- * console.log(mm.lower(20)?.[0]); // 10;
355
+ * @example
356
+ * // Greatest key < target
357
+ * const mm = new TreeMultiMap<number, string>();
358
+ * mm.add(10, 'a');
359
+ * mm.add(20, 'b');
360
+ * console.log(mm.lower(20)?.[0]); // 10;
3455
361
  */
3456
362
  lower(key: K): [K, V[]] | undefined;
3457
363
  /**
3458
364
  * Prints the internal tree structure (for debugging).
3459
365
  * @remarks Time O(n), Space O(n)
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
-
3537
-
3538
-
3539
-
3540
-
3541
-
3542
-
3543
-
3544
-
3545
-
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
- * @example
3654
- * // Display tree
3655
- * const mm = new TreeMultiMap<number, string>();
3656
- * mm.add(1, 'a');
3657
- * expect(() => mm.print()).not.toThrow();
366
+ * @example
367
+ * // Display tree
368
+ * const mm = new TreeMultiMap<number, string>();
369
+ * mm.add(1, 'a');
370
+ * expect(() => mm.print()).not.toThrow();
3658
371
  */
3659
372
  print(): void;
3660
373
  /**
3661
374
  * Executes a callback for each entry.
3662
375
  * @remarks Time O(n), Space O(1)
3663
-
3664
-
3665
-
3666
-
3667
-
3668
-
3669
-
3670
-
3671
-
3672
-
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
-
3817
-
3818
-
3819
-
3820
-
3821
-
3822
-
3823
-
3824
-
3825
-
3826
-
3827
-
3828
-
3829
-
3830
-
3831
-
3832
-
3833
-
3834
-
3835
-
3836
-
3837
-
3838
-
3839
-
3840
-
3841
-
3842
-
3843
-
3844
-
3845
-
3846
-
3847
-
3848
-
3849
-
3850
-
3851
-
3852
-
3853
-
3854
-
3855
-
3856
- * @example
3857
- * // Iterate entries
3858
- * const mm = new TreeMultiMap<number, string>();
3859
- * mm.add(1, 'a');
3860
- * mm.add(2, 'b');
3861
- * const keys: number[] = [];
3862
- * mm.forEach((v, k) => keys.push(k));
3863
- * console.log(keys); // [1, 2];
376
+ * @example
377
+ * // Iterate entries
378
+ * const mm = new TreeMultiMap<number, string>();
379
+ * mm.add(1, 'a');
380
+ * mm.add(2, 'b');
381
+ * const keys: number[] = [];
382
+ * mm.forEach((v, k) => keys.push(k));
383
+ * console.log(keys); // [1, 2];
3864
384
  */
3865
385
  forEach(callback: (value: V[], key: K, map: this) => void): void;
3866
386
  /**
3867
387
  * Creates a new map with entries that pass the predicate.
3868
388
  * @remarks Time O(n), Space O(n)
3869
-
3870
-
3871
-
3872
-
3873
-
3874
-
3875
-
3876
-
3877
-
3878
-
3879
-
3880
-
3881
-
3882
-
3883
-
3884
-
3885
-
3886
-
3887
-
3888
-
3889
-
3890
-
3891
-
3892
-
3893
-
3894
-
3895
-
3896
-
3897
-
3898
-
3899
-
3900
-
3901
-
3902
-
3903
-
3904
-
3905
-
3906
-
3907
-
3908
-
3909
-
3910
-
3911
-
3912
-
3913
-
3914
-
3915
-
3916
-
3917
-
3918
-
3919
-
3920
-
3921
-
3922
-
3923
-
3924
-
3925
-
3926
-
3927
-
3928
-
3929
-
3930
-
3931
-
3932
-
3933
-
3934
-
3935
-
3936
-
3937
-
3938
-
3939
-
3940
-
3941
-
3942
-
3943
-
3944
-
3945
-
3946
-
3947
-
3948
-
3949
-
3950
-
3951
-
3952
-
3953
-
3954
-
3955
-
3956
-
3957
-
3958
-
3959
-
3960
-
3961
-
3962
-
3963
-
3964
-
3965
-
3966
-
3967
-
3968
-
3969
-
3970
-
3971
-
3972
-
3973
-
3974
-
3975
-
3976
-
3977
-
3978
-
3979
-
3980
-
3981
-
3982
-
3983
-
3984
-
3985
-
3986
-
3987
-
3988
-
3989
-
3990
-
3991
-
3992
-
3993
-
3994
-
3995
-
3996
-
3997
-
3998
-
3999
-
4000
-
4001
-
4002
-
4003
-
4004
-
4005
-
4006
-
4007
-
4008
-
4009
-
4010
-
4011
-
4012
-
4013
-
4014
-
4015
-
4016
-
4017
-
4018
-
4019
-
4020
-
4021
-
4022
-
4023
-
4024
-
4025
-
4026
-
4027
-
4028
-
4029
-
4030
-
4031
-
4032
-
4033
-
4034
-
4035
-
4036
-
4037
-
4038
-
4039
-
4040
-
4041
-
4042
-
4043
-
4044
-
4045
-
4046
-
4047
-
4048
-
4049
-
4050
-
4051
-
4052
-
4053
-
4054
-
4055
-
4056
-
4057
-
4058
-
4059
-
4060
-
4061
-
4062
- * @example
4063
- * // Filter entries
4064
- * const mm = new TreeMultiMap<number, string>();
4065
- * mm.add(1, 'a');
4066
- * mm.add(2, 'b');
4067
- * mm.add(3, 'c');
4068
- * const filtered = mm.filter((v, k) => k > 1);
4069
- * console.log([...filtered.keys()]); // [2, 3];
389
+ * @example
390
+ * // Filter entries
391
+ * const mm = new TreeMultiMap<number, string>();
392
+ * mm.add(1, 'a');
393
+ * mm.add(2, 'b');
394
+ * mm.add(3, 'c');
395
+ * const filtered = mm.filter((v, k) => k > 1);
396
+ * console.log([...filtered.keys()]); // [2, 3];
4070
397
  */
4071
398
  filter(predicate: (value: V[], key: K, map: this) => boolean): TreeMultiMap<K, V, R>;
4072
399
  /**
4073
400
  * Creates a new map by transforming each entry.
4074
401
  * @remarks Time O(n log n), Space O(n)
4075
-
4076
-
4077
-
4078
-
4079
-
4080
-
4081
-
4082
-
4083
-
4084
-
4085
-
4086
-
4087
-
4088
-
4089
-
4090
-
4091
-
4092
-
4093
-
4094
-
4095
-
4096
-
4097
-
4098
-
4099
-
4100
-
4101
-
4102
-
4103
-
4104
-
4105
-
4106
-
4107
-
4108
-
4109
-
4110
-
4111
-
4112
-
4113
-
4114
-
4115
-
4116
-
4117
-
4118
-
4119
-
4120
-
4121
-
4122
-
4123
-
4124
-
4125
-
4126
-
4127
-
4128
-
4129
-
4130
-
4131
-
4132
-
4133
-
4134
-
4135
-
4136
-
4137
-
4138
-
4139
-
4140
-
4141
-
4142
-
4143
-
4144
-
4145
-
4146
-
4147
-
4148
-
4149
-
4150
-
4151
-
4152
-
4153
-
4154
-
4155
-
4156
-
4157
-
4158
-
4159
-
4160
-
4161
-
4162
-
4163
-
4164
-
4165
-
4166
-
4167
-
4168
-
4169
-
4170
-
4171
-
4172
-
4173
-
4174
-
4175
-
4176
-
4177
-
4178
-
4179
-
4180
-
4181
-
4182
-
4183
-
4184
-
4185
-
4186
-
4187
-
4188
-
4189
-
4190
-
4191
-
4192
-
4193
-
4194
-
4195
-
4196
-
4197
-
4198
-
4199
-
4200
-
4201
-
4202
-
4203
-
4204
-
4205
-
4206
-
4207
-
4208
-
4209
-
4210
-
4211
-
4212
-
4213
-
4214
-
4215
-
4216
-
4217
-
4218
-
4219
-
4220
-
4221
-
4222
-
4223
-
4224
-
4225
-
4226
-
4227
-
4228
-
4229
-
4230
-
4231
-
4232
-
4233
-
4234
-
4235
-
4236
-
4237
-
4238
-
4239
-
4240
-
4241
-
4242
-
4243
-
4244
-
4245
-
4246
-
4247
-
4248
-
4249
-
4250
-
4251
-
4252
-
4253
-
4254
-
4255
-
4256
-
4257
-
4258
-
4259
-
4260
-
4261
-
4262
-
4263
-
4264
-
4265
-
4266
-
4267
-
4268
- * @example
4269
- * // Transform values
4270
- * const mm = new TreeMultiMap<number, string>();
4271
- * mm.add(1, 'a');
4272
- * const mapped = mm.map((v, k) => [k, v.map(s => s.toUpperCase())] as [number, string[]]);
4273
- * console.log(mapped.get(1)); // ['A'];
402
+ * @example
403
+ * // Transform values
404
+ * const mm = new TreeMultiMap<number, string>();
405
+ * mm.add(1, 'a');
406
+ * const mapped = mm.map((v, k) => [k, v.map(s => s.toUpperCase())] as [number, string[]]);
407
+ * console.log(mapped.get(1)); // ['A'];
4274
408
  */
4275
409
  map<V2>(mapper: (value: V[], key: K, map: this) => [K, V2[]]): TreeMultiMap<K, V2, R>;
4276
410
  /**
4277
411
  * Reduces all entries to a single value.
4278
412
  * @remarks Time O(n), Space O(1)
4279
-
4280
-
4281
-
4282
-
4283
-
4284
-
4285
-
4286
-
4287
-
4288
-
4289
-
4290
-
4291
-
4292
-
4293
-
4294
-
4295
-
4296
-
4297
-
4298
-
4299
-
4300
-
4301
-
4302
-
4303
-
4304
-
4305
-
4306
-
4307
-
4308
-
4309
-
4310
-
4311
-
4312
-
4313
-
4314
-
4315
-
4316
-
4317
-
4318
-
4319
-
4320
-
4321
-
4322
-
4323
-
4324
-
4325
-
4326
-
4327
-
4328
-
4329
-
4330
-
4331
-
4332
-
4333
-
4334
-
4335
-
4336
-
4337
-
4338
-
4339
-
4340
-
4341
-
4342
-
4343
-
4344
-
4345
-
4346
-
4347
-
4348
-
4349
-
4350
-
4351
-
4352
-
4353
-
4354
-
4355
-
4356
-
4357
-
4358
-
4359
-
4360
-
4361
-
4362
-
4363
-
4364
-
4365
-
4366
-
4367
-
4368
-
4369
-
4370
-
4371
-
4372
-
4373
-
4374
-
4375
-
4376
-
4377
-
4378
-
4379
-
4380
-
4381
-
4382
-
4383
-
4384
-
4385
-
4386
-
4387
-
4388
-
4389
-
4390
-
4391
-
4392
-
4393
-
4394
-
4395
-
4396
-
4397
-
4398
-
4399
-
4400
-
4401
-
4402
-
4403
-
4404
-
4405
-
4406
-
4407
-
4408
-
4409
-
4410
-
4411
-
4412
-
4413
-
4414
-
4415
-
4416
-
4417
-
4418
-
4419
-
4420
-
4421
-
4422
-
4423
-
4424
-
4425
-
4426
-
4427
-
4428
-
4429
-
4430
-
4431
-
4432
-
4433
-
4434
-
4435
-
4436
-
4437
-
4438
-
4439
-
4440
-
4441
-
4442
-
4443
-
4444
-
4445
-
4446
-
4447
-
4448
-
4449
-
4450
-
4451
-
4452
-
4453
-
4454
-
4455
-
4456
-
4457
-
4458
-
4459
-
4460
-
4461
-
4462
-
4463
-
4464
-
4465
-
4466
-
4467
-
4468
-
4469
-
4470
-
4471
-
4472
- * @example
4473
- * // Aggregate
4474
- * const mm = new TreeMultiMap<number, number>();
4475
- * mm.add(1, 10);
4476
- * mm.add(2, 20);
4477
- * const sum = mm.reduce((acc, v) => acc + v.reduce((a, b) => a + b, 0), 0);
4478
- * console.log(sum); // 30;
413
+ * @example
414
+ * // Aggregate
415
+ * const mm = new TreeMultiMap<number, number>();
416
+ * mm.add(1, 10);
417
+ * mm.add(2, 20);
418
+ * const sum = mm.reduce((acc, v) => acc + v.reduce((a, b) => a + b, 0), 0);
419
+ * console.log(sum); // 30;
4479
420
  */
4480
421
  reduce<U>(callback: (accumulator: U, value: V[], key: K, map: this) => U, initialValue: U): U;
4481
422
  /**
4482
423
  * Sets multiple entries at once.
4483
424
  * @remarks Time O(m log n), Space O(m) where m is input size
4484
-
4485
-
4486
-
4487
-
4488
-
4489
-
4490
-
4491
-
4492
-
4493
-
4494
-
4495
-
4496
-
4497
-
4498
-
4499
-
4500
-
4501
-
4502
-
4503
-
4504
-
4505
-
4506
-
4507
-
4508
-
4509
-
4510
-
4511
-
4512
-
4513
-
4514
-
4515
-
4516
-
4517
-
4518
-
4519
-
4520
-
4521
-
4522
-
4523
-
4524
-
4525
-
4526
-
4527
-
4528
-
4529
-
4530
-
4531
-
4532
-
4533
-
4534
-
4535
-
4536
-
4537
-
4538
-
4539
-
4540
-
4541
-
4542
-
4543
-
4544
-
4545
-
4546
-
4547
-
4548
-
4549
-
4550
-
4551
-
4552
-
4553
-
4554
-
4555
-
4556
-
4557
-
4558
-
4559
-
4560
-
4561
-
4562
-
4563
-
4564
-
4565
-
4566
-
4567
-
4568
-
4569
-
4570
-
4571
-
4572
-
4573
-
4574
-
4575
-
4576
-
4577
-
4578
-
4579
-
4580
-
4581
-
4582
-
4583
-
4584
-
4585
-
4586
-
4587
-
4588
-
4589
-
4590
-
4591
-
4592
-
4593
-
4594
-
4595
-
4596
-
4597
-
4598
-
4599
-
4600
-
4601
-
4602
-
4603
-
4604
-
4605
-
4606
-
4607
-
4608
-
4609
-
4610
-
4611
-
4612
-
4613
-
4614
-
4615
-
4616
-
4617
-
4618
-
4619
-
4620
-
4621
-
4622
-
4623
-
4624
-
4625
-
4626
-
4627
-
4628
-
4629
-
4630
-
4631
-
4632
-
4633
-
4634
-
4635
-
4636
-
4637
-
4638
-
4639
-
4640
-
4641
-
4642
-
4643
-
4644
-
4645
-
4646
-
4647
-
4648
-
4649
-
4650
-
4651
-
4652
-
4653
-
4654
-
4655
-
4656
-
4657
-
4658
-
4659
-
4660
-
4661
-
4662
-
4663
-
4664
-
4665
-
4666
-
4667
-
4668
-
4669
- * @example
4670
- * // Set multiple entries
4671
- * const mm = new TreeMultiMap<number, string>();
4672
- * mm.setMany([[1, ['a']], [2, ['b']]]);
4673
- * console.log(mm.size); // 2;
425
+ * @example
426
+ * // Set multiple entries
427
+ * const mm = new TreeMultiMap<number, string>();
428
+ * mm.setMany([
429
+ * [1, ['a']],
430
+ * [2, ['b']]
431
+ * ]);
432
+ * console.log(mm.size); // 2;
4674
433
  */
4675
434
  setMany(keysNodesEntriesOrRaws: Iterable<K | [K | null | undefined, V[] | undefined]>): boolean[];
4676
435
  /**
4677
436
  * Searches for entries within a key range.
4678
437
  * @remarks Time O(log n + k), Space O(k) where k is result size
4679
-
4680
-
4681
-
4682
-
4683
-
4684
-
4685
-
4686
-
4687
-
4688
-
4689
-
4690
-
4691
-
4692
-
4693
-
4694
-
4695
-
4696
-
4697
-
4698
-
4699
-
4700
-
4701
-
4702
-
4703
-
4704
-
4705
-
4706
-
4707
-
4708
-
4709
-
4710
-
4711
-
4712
-
4713
-
4714
-
4715
-
4716
-
4717
-
4718
-
4719
-
4720
-
4721
-
4722
-
4723
-
4724
-
4725
-
4726
-
4727
-
4728
-
4729
-
4730
-
4731
-
4732
-
4733
-
4734
-
4735
-
4736
-
4737
-
4738
-
4739
-
4740
-
4741
-
4742
-
4743
-
4744
-
4745
-
4746
-
4747
-
4748
-
4749
-
4750
-
4751
-
4752
-
4753
-
4754
-
4755
-
4756
-
4757
-
4758
-
4759
-
4760
-
4761
-
4762
-
4763
-
4764
-
4765
-
4766
-
4767
-
4768
-
4769
-
4770
-
4771
-
4772
-
4773
-
4774
-
4775
-
4776
-
4777
-
4778
-
4779
-
4780
-
4781
-
4782
-
4783
-
4784
-
4785
-
4786
-
4787
-
4788
-
4789
-
4790
-
4791
-
4792
-
4793
-
4794
-
4795
-
4796
-
4797
-
4798
-
4799
-
4800
-
4801
-
4802
-
4803
-
4804
-
4805
-
4806
-
4807
-
4808
-
4809
-
4810
-
4811
-
4812
-
4813
-
4814
-
4815
-
4816
-
4817
-
4818
-
4819
-
4820
-
4821
-
4822
-
4823
-
4824
-
4825
-
4826
-
4827
-
4828
-
4829
-
4830
-
4831
-
4832
-
4833
- * @example
4834
- * // Find keys in range
4835
- * const mm = new TreeMultiMap<number, string>();
4836
- * mm.add(10, 'a');
4837
- * mm.add(20, 'b');
4838
- * mm.add(30, 'c');
4839
- * const result = mm.rangeSearch([15, 25]);
4840
- * console.log(result.length); // 1;
438
+ * @example
439
+ * // Find keys in range
440
+ * const mm = new TreeMultiMap<number, string>();
441
+ * mm.add(10, 'a');
442
+ * mm.add(20, 'b');
443
+ * mm.add(30, 'c');
444
+ * const result = mm.rangeSearch([15, 25]);
445
+ * console.log(result.length); // 1;
4841
446
  */
4842
447
  rangeSearch<C extends (node: RedBlackTreeNode<K, V[]>) => unknown>(range: Range<K> | [K, K], callback?: C): ReturnType<C>[];
4843
448
  /**
4844
449
  * Creates a shallow clone of this map.
4845
450
  * @remarks Time O(n log n), Space O(n)
4846
-
4847
-
4848
-
4849
-
4850
-
4851
-
4852
-
4853
-
4854
-
4855
-
4856
-
4857
-
4858
-
4859
-
4860
-
4861
-
4862
-
4863
-
4864
-
4865
-
4866
-
4867
-
4868
-
4869
-
4870
-
4871
-
4872
-
4873
-
4874
-
4875
-
4876
-
4877
-
4878
-
4879
-
4880
-
4881
-
4882
-
4883
-
4884
-
4885
-
4886
-
4887
-
4888
-
4889
-
4890
-
4891
-
4892
-
4893
-
4894
-
4895
-
4896
-
4897
-
4898
-
4899
-
4900
-
4901
-
4902
-
4903
-
4904
-
4905
-
4906
-
4907
-
4908
-
4909
-
4910
-
4911
-
4912
-
4913
-
4914
-
4915
-
4916
-
4917
-
4918
-
4919
-
4920
-
4921
-
4922
-
4923
-
4924
-
4925
-
4926
-
4927
-
4928
-
4929
-
4930
-
4931
-
4932
-
4933
-
4934
-
4935
-
4936
-
4937
-
4938
-
4939
-
4940
-
4941
-
4942
-
4943
-
4944
-
4945
-
4946
-
4947
-
4948
-
4949
-
4950
-
4951
-
4952
-
4953
-
4954
-
4955
-
4956
-
4957
-
4958
-
4959
-
4960
-
4961
-
4962
-
4963
-
4964
-
4965
-
4966
-
4967
-
4968
-
4969
-
4970
-
4971
-
4972
-
4973
-
4974
-
4975
-
4976
-
4977
-
4978
-
4979
-
4980
-
4981
-
4982
-
4983
-
4984
-
4985
-
4986
-
4987
-
4988
-
4989
-
4990
-
4991
-
4992
-
4993
-
4994
-
4995
-
4996
-
4997
-
4998
-
4999
-
5000
-
5001
-
5002
- * @example
5003
- * // Order-statistic on BST
5004
- * const tree = new TreeMultiMap<number>([30, 10, 50, 20, 40], { enableOrderStatistic: true });
5005
- * console.log(tree.getByRank(0)); // 10;
5006
- * console.log(tree.getByRank(4)); // 50;
5007
- * console.log(tree.getRank(30)); // 2;
451
+ * @example
452
+ * // Order-statistic on BST
453
+ * const tree = new TreeMultiMap<number>([30, 10, 50, 20, 40], { enableOrderStatistic: true });
454
+ * console.log(tree.getByRank(0)); // 10;
455
+ * console.log(tree.getByRank(4)); // 50;
456
+ * console.log(tree.getRank(30)); // 2;
5008
457
  */
5009
458
  getByRank(k: number): [K, V[]] | undefined;
5010
459
  /**
5011
- * Get the rank of a key in sorted order
5012
- * @example
5013
- * // Get the rank of a key in sorted order
5014
- * const tree = new TreeMultiMap<number>(
5015
- * [10, 20, 30, 40, 50],
5016
- * { enableOrderStatistic: true }
5017
- * );
5018
- * console.log(tree.getRank(10)); // 0; // smallest → rank 0
5019
- * console.log(tree.getRank(30)); // 2; // 2 elements before 30 in tree order
5020
- * console.log(tree.getRank(50)); // 4; // largest → rank 4
5021
- * console.log(tree.getRank(25)); // 2;
5022
- */
460
+ * Get the rank of a key in sorted order
461
+ * @example
462
+ * // Get the rank of a key in sorted order
463
+ * const tree = new TreeMultiMap<number>(
464
+ * [10, 20, 30, 40, 50],
465
+ * { enableOrderStatistic: true }
466
+ * );
467
+ * console.log(tree.getRank(10)); // 0; // smallest → rank 0
468
+ * console.log(tree.getRank(30)); // 2; // 2 elements before 30 in tree order
469
+ * console.log(tree.getRank(50)); // 4; // largest → rank 4
470
+ * console.log(tree.getRank(25)); // 2;
471
+ */
5023
472
  getRank(key: K): number;
5024
473
  /**
5025
- * Get elements by rank range
5026
-
5027
-
5028
-
5029
-
5030
-
5031
-
5032
-
5033
-
5034
-
5035
-
5036
-
5037
-
5038
-
5039
-
5040
-
5041
- * @example
5042
- * // Pagination by position in tree order
5043
- * const tree = new TreeMultiMap<number>(
5044
- * [10, 20, 30, 40, 50, 60, 70, 80, 90],
5045
- * { enableOrderStatistic: true }
5046
- * );
5047
- * const pageSize = 3;
5048
- *
5049
- * // Page 1
5050
- * console.log(tree.rangeByRank(0, pageSize - 1)); // [10, 20, 30];
5051
- * // Page 2
5052
- * console.log(tree.rangeByRank(pageSize, 2 * pageSize - 1)); // [40, 50, 60];
5053
- * // Page 3
5054
- * console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
5055
- */
474
+ * Get elements by rank range
475
+ * @example
476
+ * // Pagination by position in tree order
477
+ * const tree = new TreeMultiMap<number>([10, 20, 30, 40, 50, 60, 70, 80, 90], { enableOrderStatistic: true });
478
+ * const pageSize = 3;
479
+ *
480
+ * // Page 1
481
+ * console.log(tree.rangeByRank(0, pageSize - 1)); // [10, 20, 30];
482
+ * // Page 2
483
+ * console.log(tree.rangeByRank(pageSize, 2 * pageSize - 1)); // [40, 50, 60];
484
+ * // Page 3
485
+ * console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
486
+ */
5056
487
  rangeByRank(start: number, end: number): Array<[K, V[]]>;
5057
488
  /**
5058
- * Deep copy
5059
-
5060
-
5061
-
5062
-
5063
-
5064
-
5065
-
5066
-
5067
-
5068
-
5069
-
5070
-
5071
-
5072
-
5073
-
5074
-
5075
-
5076
-
5077
-
5078
-
5079
-
5080
-
5081
-
5082
-
5083
-
5084
-
5085
-
5086
-
5087
-
5088
-
5089
-
5090
-
5091
-
5092
-
5093
-
5094
-
5095
-
5096
-
5097
-
5098
- * @example
5099
- * // Deep clone
5100
- * const mm = new TreeMultiMap<number, string>();
5101
- * mm.add(1, 'a');
5102
- * const copy = mm.clone();
5103
- * copy.delete(1);
5104
- * console.log(mm.has(1)); // true;
5105
- */
489
+ * Deep copy
490
+ * @example
491
+ * // Deep clone
492
+ * const mm = new TreeMultiMap<number, string>();
493
+ * mm.add(1, 'a');
494
+ * const copy = mm.clone();
495
+ * copy.delete(1);
496
+ * console.log(mm.has(1)); // true;
497
+ */
5106
498
  clone(): TreeMultiMap<K, V, R>;
5107
499
  /**
5108
- * Expose comparator for advanced usage/testing (read-only).
500
+ * Validates the key against the default comparator rules.
5109
501
  * @remarks Time O(1), Space O(1)
5110
502
  */
5111
- get comparator(): Comparator<K>;
503
+ private _validateKey;
5112
504
  }