binary-tree-typed 2.5.0 → 2.5.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 (90) hide show
  1. package/dist/cjs/index.cjs +771 -68
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs-legacy/index.cjs +771 -68
  4. package/dist/cjs-legacy/index.cjs.map +1 -1
  5. package/dist/esm/index.mjs +771 -69
  6. package/dist/esm/index.mjs.map +1 -1
  7. package/dist/esm-legacy/index.mjs +771 -69
  8. package/dist/esm-legacy/index.mjs.map +1 -1
  9. package/dist/types/common/error.d.ts +9 -0
  10. package/dist/types/common/index.d.ts +1 -1
  11. package/dist/types/data-structures/base/index.d.ts +1 -0
  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 +288 -0
  15. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +336 -0
  16. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +618 -18
  17. package/dist/types/data-structures/binary-tree/bst.d.ts +676 -1
  18. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +456 -0
  19. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +144 -1
  20. package/dist/types/data-structures/binary-tree/tree-map.d.ts +3307 -399
  21. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3285 -360
  22. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2674 -325
  23. package/dist/types/data-structures/binary-tree/tree-set.d.ts +3072 -287
  24. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  25. package/dist/types/data-structures/graph/directed-graph.d.ts +240 -0
  26. package/dist/types/data-structures/graph/undirected-graph.d.ts +216 -0
  27. package/dist/types/data-structures/hash/hash-map.d.ts +274 -10
  28. package/dist/types/data-structures/heap/heap.d.ts +336 -0
  29. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +411 -3
  30. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +363 -3
  31. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +434 -2
  32. package/dist/types/data-structures/matrix/matrix.d.ts +192 -0
  33. package/dist/types/data-structures/queue/deque.d.ts +364 -4
  34. package/dist/types/data-structures/queue/queue.d.ts +288 -0
  35. package/dist/types/data-structures/stack/stack.d.ts +240 -0
  36. package/dist/types/data-structures/trie/trie.d.ts +292 -4
  37. package/dist/types/interfaces/graph.d.ts +1 -1
  38. package/dist/types/types/common.d.ts +2 -2
  39. package/dist/types/types/data-structures/binary-tree/bst.d.ts +1 -0
  40. package/dist/types/types/data-structures/binary-tree/tree-map.d.ts +5 -0
  41. package/dist/types/types/data-structures/binary-tree/tree-multi-set.d.ts +4 -0
  42. package/dist/types/types/data-structures/binary-tree/tree-set.d.ts +4 -0
  43. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  44. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  45. package/dist/types/types/utils/validate-type.d.ts +4 -4
  46. package/dist/umd/binary-tree-typed.js +773 -71
  47. package/dist/umd/binary-tree-typed.js.map +1 -1
  48. package/dist/umd/binary-tree-typed.min.js +5 -5
  49. package/dist/umd/binary-tree-typed.min.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/common/error.ts +19 -1
  52. package/src/common/index.ts +1 -1
  53. package/src/data-structures/base/index.ts +1 -0
  54. package/src/data-structures/base/iterable-element-base.ts +3 -2
  55. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  56. package/src/data-structures/base/linear-base.ts +3 -3
  57. package/src/data-structures/binary-tree/avl-tree.ts +299 -0
  58. package/src/data-structures/binary-tree/binary-indexed-tree.ts +341 -5
  59. package/src/data-structures/binary-tree/binary-tree.ts +606 -6
  60. package/src/data-structures/binary-tree/bst.ts +946 -7
  61. package/src/data-structures/binary-tree/red-black-tree.ts +472 -0
  62. package/src/data-structures/binary-tree/segment-tree.ts +145 -2
  63. package/src/data-structures/binary-tree/tree-map.ts +3423 -499
  64. package/src/data-structures/binary-tree/tree-multi-map.ts +3537 -596
  65. package/src/data-structures/binary-tree/tree-multi-set.ts +2855 -495
  66. package/src/data-structures/binary-tree/tree-set.ts +3209 -413
  67. package/src/data-structures/graph/abstract-graph.ts +6 -6
  68. package/src/data-structures/graph/directed-graph.ts +240 -0
  69. package/src/data-structures/graph/undirected-graph.ts +216 -0
  70. package/src/data-structures/hash/hash-map.ts +281 -19
  71. package/src/data-structures/heap/heap.ts +340 -4
  72. package/src/data-structures/heap/max-heap.ts +2 -2
  73. package/src/data-structures/linked-list/doubly-linked-list.ts +411 -3
  74. package/src/data-structures/linked-list/singly-linked-list.ts +363 -3
  75. package/src/data-structures/linked-list/skip-linked-list.ts +439 -7
  76. package/src/data-structures/matrix/matrix.ts +202 -10
  77. package/src/data-structures/priority-queue/max-priority-queue.ts +2 -2
  78. package/src/data-structures/queue/deque.ts +365 -5
  79. package/src/data-structures/queue/queue.ts +288 -0
  80. package/src/data-structures/stack/stack.ts +240 -0
  81. package/src/data-structures/trie/trie.ts +295 -7
  82. package/src/interfaces/graph.ts +1 -1
  83. package/src/types/common.ts +2 -2
  84. package/src/types/data-structures/binary-tree/bst.ts +1 -0
  85. package/src/types/data-structures/binary-tree/tree-map.ts +6 -0
  86. package/src/types/data-structures/binary-tree/tree-multi-set.ts +5 -0
  87. package/src/types/data-structures/binary-tree/tree-set.ts +5 -0
  88. package/src/types/data-structures/heap/heap.ts +1 -0
  89. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  90. package/src/types/utils/validate-type.ts +4 -4
@@ -89,14 +89,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
89
89
 
90
90
 
91
91
 
92
- * @example
93
- * // Check if empty
94
- * console.log(new TreeMultiMap().isEmpty()); // true;
95
- */
96
- isEmpty(): boolean;
97
- /**
98
- * Removes all entries from the map.
99
- * @remarks Time O(1), Space O(1)
100
92
 
101
93
 
102
94
 
@@ -135,44 +127,8 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
135
127
 
136
128
 
137
129
 
138
- * @example
139
- * // Remove all entries
140
- * const mm = new TreeMultiMap<number, string>();
141
- * mm.add(1, 'a');
142
- * mm.clear();
143
- * console.log(mm.isEmpty()); // true;
144
- */
145
- clear(): void;
146
- /**
147
- * Bucket length for a key (missing => 0).
148
- * @remarks Time O(log n), Space O(1)
149
-
150
-
151
- * @example
152
- * // Count values for key
153
- * const mm = new TreeMultiMap<number, string>();
154
- * mm.add(1, 'a');
155
- * mm.add(1, 'b');
156
- * console.log(mm.count(1)); // 2;
157
- */
158
- count(key: K): number;
159
- /**
160
- * Total number of values across all buckets (Σ bucket.length).
161
- * @remarks Time O(n), Space O(1)
162
130
 
163
131
 
164
- * @example
165
- * // Total number of values
166
- * const mm = new TreeMultiMap<number, string>();
167
- * mm.add(1, 'a');
168
- * mm.add(1, 'b');
169
- * mm.add(2, 'c');
170
- * console.log(mm.totalSize); // 3;
171
- */
172
- get totalSize(): number;
173
- /**
174
- * Whether the map contains the given key.
175
- * @remarks Time O(log n), Space O(1)
176
132
 
177
133
 
178
134
 
@@ -225,17 +181,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
225
181
 
226
182
 
227
183
 
228
- * @example
229
- * // Check key existence
230
- * const mm = new TreeMultiMap<number, string>();
231
- * mm.add(1, 'a');
232
- * console.log(mm.has(1)); // true;
233
- * console.log(mm.has(2)); // false;
234
- */
235
- has(key: K): boolean;
236
- /**
237
- * Live bucket reference (do not auto-delete key if bucket becomes empty via mutation).
238
- * @remarks Time O(log n), Space O(1)
239
184
 
240
185
 
241
186
 
@@ -264,6 +209,14 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
264
209
 
265
210
 
266
211
 
212
+ * @example
213
+ * // Check if empty
214
+ * console.log(new TreeMultiMap().isEmpty()); // true;
215
+ */
216
+ isEmpty(): boolean;
217
+ /**
218
+ * Removes all entries from the map.
219
+ * @remarks Time O(1), Space O(1)
267
220
 
268
221
 
269
222
 
@@ -288,17 +241,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
288
241
 
289
242
 
290
243
 
291
- * @example
292
- * // Get values for key
293
- * const mm = new TreeMultiMap<number, string>();
294
- * mm.add(1, 'a');
295
- * mm.add(1, 'b');
296
- * console.log(mm.get(1)); // ['a', 'b'];
297
- */
298
- get(key: K): V[] | undefined;
299
- /**
300
- * Append a single value.
301
- * @remarks Time O(log n), Space O(1)
302
244
 
303
245
 
304
246
 
@@ -331,18 +273,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
331
273
 
332
274
 
333
275
 
334
- * @example
335
- * // Add key-value pair
336
- * const mm = new TreeMultiMap<number, string>();
337
- * mm.add(1, 'a');
338
- * mm.add(1, 'b');
339
- * mm.add(2, 'c');
340
- * console.log(mm.get(1)); // ['a', 'b'];
341
- */
342
- add(key: K, value: V): boolean;
343
- /**
344
- * Alias for compatibility with existing TreeMultiMap semantics.
345
- * @remarks Time O(log n), Space O(1) for single value; O(log n + m) for bucket append
346
276
 
347
277
 
348
278
 
@@ -393,18 +323,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
393
323
 
394
324
 
395
325
 
396
- * @example
397
- * // Set values for key
398
- * const mm = new TreeMultiMap<number, string>();
399
- * mm.set(1, 'a');
400
- * mm.set(1, 'b');
401
- * console.log(mm.get(1)); // ['a', 'b'];
402
- */
403
- set(entry: [K | null | undefined, V[] | undefined] | K | null | undefined, value?: V): boolean;
404
- set(key: K, value: V): boolean;
405
- /**
406
- * Deletes a key and its entire bucket.
407
- * @remarks Time O(log n), Space O(1)
408
326
 
409
327
 
410
328
 
@@ -458,64 +376,3182 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
458
376
 
459
377
 
460
378
  * @example
461
- * // Remove key
379
+ * // Remove all entries
462
380
  * const mm = new TreeMultiMap<number, string>();
463
381
  * mm.add(1, 'a');
464
- * mm.add(2, 'b');
465
- * mm.delete(1);
466
- * console.log(mm.has(1)); // false;
382
+ * mm.clear();
383
+ * console.log(mm.isEmpty()); // true;
467
384
  */
468
- delete(key: K): boolean;
385
+ clear(): void;
469
386
  /**
470
- * Check if a specific value exists in a key's bucket.
471
- * @remarks Time O(log n + m), Space O(1) where m is bucket size
387
+ * Bucket length for a key (missing => 0).
388
+ * @remarks Time O(log n), Space O(1)
389
+
390
+
391
+
392
+
393
+
394
+
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
472
411
 
473
412
 
474
- * @example
475
- * // Check specific key-value
476
- * const mm = new TreeMultiMap<number, string>();
477
- * mm.add(1, 'a');
478
- * console.log(mm.hasEntry(1, 'a')); // true;
479
- * console.log(mm.hasEntry(1, 'z')); // false;
480
- */
481
- hasEntry(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
482
- /**
483
- * Delete a single occurrence of a value from a key's bucket.
484
- * @remarks Time O(log n + m), Space O(1) where m is bucket size
485
413
 
486
414
 
487
415
  * @example
488
- * // Delete specific value
416
+ * // Count values for key
489
417
  * const mm = new TreeMultiMap<number, string>();
490
418
  * mm.add(1, 'a');
491
419
  * mm.add(1, 'b');
492
- * mm.deleteValue(1, 'a');
493
- * console.log(mm.get(1)); // ['b'];
420
+ * console.log(mm.count(1)); // 2;
494
421
  */
495
- deleteValue(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
422
+ count(key: K): number;
496
423
  /**
497
- * Delete all occurrences of a value from a key's bucket.
498
- * @remarks Time O(log n + m), Space O(1) where m is bucket size
424
+ * Total number of values across all buckets bucket.length).
425
+ * @remarks Time O(n), Space O(1)
426
+
427
+
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
499
450
 
500
451
 
501
452
  * @example
502
- * // Delete all matching values
453
+ * // Total number of values
503
454
  * const mm = new TreeMultiMap<number, string>();
504
455
  * mm.add(1, 'a');
505
- * mm.add(1, 'a');
506
456
  * mm.add(1, 'b');
507
- * const count = mm.deleteValues(1, 'a');
508
- * console.log(count); // 2;
509
- */
510
- deleteValues(key: K, value: V, eq?: (a: V, b: V) => boolean): number;
511
- /**
512
- * Iterates over all entries as [key, bucket] pairs.
513
- * @remarks Time O(n), Space O(1)
457
+ * mm.add(2, 'c');
458
+ * console.log(mm.totalSize); // 3;
514
459
  */
515
- [Symbol.iterator](): Iterator<[K, V[]]>;
460
+ get totalSize(): number;
516
461
  /**
517
- * Iterates over all keys.
518
- * @remarks Time O(n), Space O(1)
462
+ * Whether the map contains the given key.
463
+ * @remarks Time O(log n), Space O(1)
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
+
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
+ * @example
661
+ * // Check key existence
662
+ * const mm = new TreeMultiMap<number, string>();
663
+ * mm.add(1, 'a');
664
+ * console.log(mm.has(1)); // true;
665
+ * console.log(mm.has(2)); // false;
666
+ */
667
+ has(key: K): boolean;
668
+ /**
669
+ * Live bucket reference (do not auto-delete key if bucket becomes empty via mutation).
670
+ * @remarks Time O(log n), Space O(1)
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
+
796
+
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
+ * @example
868
+ * // Get values for key
869
+ * const mm = new TreeMultiMap<number, string>();
870
+ * mm.add(1, 'a');
871
+ * mm.add(1, 'b');
872
+ * console.log(mm.get(1)); // ['a', 'b'];
873
+ */
874
+ get(key: K): V[] | undefined;
875
+ /**
876
+ * Append a single value.
877
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
1031
+ * // Add key-value pair
1032
+ * const mm = new TreeMultiMap<number, string>();
1033
+ * mm.add(1, 'a');
1034
+ * mm.add(1, 'b');
1035
+ * mm.add(2, 'c');
1036
+ * console.log(mm.get(1)); // ['a', 'b'];
1037
+ */
1038
+ add(key: K, value: V): boolean;
1039
+ /**
1040
+ * Alias for compatibility with existing TreeMultiMap semantics.
1041
+ * @remarks Time O(log n), Space O(1) for single value; O(log n + m) for bucket append
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
+
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
+
1234
+
1235
+
1236
+ * @example
1237
+ * // Set values for key
1238
+ * const mm = new TreeMultiMap<number, string>();
1239
+ * mm.set(1, 'a');
1240
+ * mm.set(1, 'b');
1241
+ * console.log(mm.get(1)); // ['a', 'b'];
1242
+ */
1243
+ set(entry: [K | null | undefined, V[] | undefined] | K | null | undefined, value?: V): boolean;
1244
+ set(key: K, value: V): boolean;
1245
+ /**
1246
+ * Deletes a key and its entire bucket.
1247
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
1445
+ * // Remove key
1446
+ * const mm = new TreeMultiMap<number, string>();
1447
+ * mm.add(1, 'a');
1448
+ * mm.add(2, 'b');
1449
+ * mm.delete(1);
1450
+ * console.log(mm.has(1)); // false;
1451
+ */
1452
+ delete(key: K): boolean;
1453
+ /**
1454
+ * Check if a specific value exists in a key's bucket.
1455
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
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
+ * @example
1483
+ * // Check specific key-value
1484
+ * const mm = new TreeMultiMap<number, string>();
1485
+ * mm.add(1, 'a');
1486
+ * console.log(mm.hasEntry(1, 'a')); // true;
1487
+ * console.log(mm.hasEntry(1, 'z')); // false;
1488
+ */
1489
+ hasEntry(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
1490
+ /**
1491
+ * Delete a single occurrence of a value from a key's bucket.
1492
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
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
+ * @example
1520
+ * // Delete specific value
1521
+ * const mm = new TreeMultiMap<number, string>();
1522
+ * mm.add(1, 'a');
1523
+ * mm.add(1, 'b');
1524
+ * mm.deleteValue(1, 'a');
1525
+ * console.log(mm.get(1)); // ['b'];
1526
+ */
1527
+ deleteValue(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
1528
+ /**
1529
+ * Delete all occurrences of a value from a key's bucket.
1530
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
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
+ * @example
1558
+ * // Delete all matching values
1559
+ * const mm = new TreeMultiMap<number, string>();
1560
+ * mm.add(1, 'a');
1561
+ * mm.add(1, 'a');
1562
+ * mm.add(1, 'b');
1563
+ * const count = mm.deleteValues(1, 'a');
1564
+ * console.log(count); // 2;
1565
+ */
1566
+ deleteValues(key: K, value: V, eq?: (a: V, b: V) => boolean): number;
1567
+ /**
1568
+ * Iterates over all entries as [key, bucket] pairs.
1569
+ * @remarks Time O(n), Space O(1)
1570
+ */
1571
+ [Symbol.iterator](): Iterator<[K, V[]]>;
1572
+ /**
1573
+ * Iterates over all keys.
1574
+ * @remarks Time O(n), Space O(1)
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
+
1732
+
1733
+ * @example
1734
+ * // Iterate keys
1735
+ * const mm = new TreeMultiMap<number, string>();
1736
+ * mm.add(3, 'c');
1737
+ * mm.add(1, 'a');
1738
+ * console.log([...mm.keys()]); // [1, 3];
1739
+ */
1740
+ keys(): IterableIterator<K>;
1741
+ /**
1742
+ * Iterates over all buckets.
1743
+ * @remarks Time O(n), Space O(1)
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
+
1777
+
1778
+
1779
+
1780
+
1781
+
1782
+
1783
+
1784
+
1785
+
1786
+
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
+
1821
+
1822
+
1823
+
1824
+
1825
+
1826
+
1827
+
1828
+
1829
+
1830
+
1831
+
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
+
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
+ * @example
1903
+ * // Iterate value arrays
1904
+ * const mm = new TreeMultiMap<number, string>();
1905
+ * mm.add(1, 'a');
1906
+ * mm.add(1, 'b');
1907
+ * console.log([...mm.values()]); // [['a', 'b']];
1908
+ */
1909
+ values(): IterableIterator<V[]>;
1910
+ /**
1911
+ * Iterates over all entries for a specific key.
1912
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
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
+ * @example
1940
+ * // Get entries for key
1941
+ * const mm = new TreeMultiMap<number, string>();
1942
+ * mm.add(1, 'a');
1943
+ * mm.add(1, 'b');
1944
+ * console.log([...mm.entriesOf(1)]); // [[1, 'a'], [1, 'b']];
1945
+ */
1946
+ entriesOf(key: K): IterableIterator<[K, V]>;
1947
+ /**
1948
+ * Iterates over all values for a specific key.
1949
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
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
+ * @example
1977
+ * // Get flat values for key
1978
+ * const mm = new TreeMultiMap<number, string>();
1979
+ * mm.add(1, 'a');
1980
+ * mm.add(1, 'b');
1981
+ * console.log([...mm.valuesOf(1)]); // ['a', 'b'];
1982
+ */
1983
+ valuesOf(key: K): IterableIterator<V>;
1984
+ /**
1985
+ * Iterates over all [key, value] pairs (flattened from buckets).
1986
+ * @remarks Time O(T), Space O(1) where T is totalSize
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
+ * @example
2014
+ * // All key-value pairs flattened
2015
+ * const mm = new TreeMultiMap<number, string>();
2016
+ * mm.add(1, 'a');
2017
+ * mm.add(1, 'b');
2018
+ * mm.add(2, 'c');
2019
+ * console.log([...mm.flatEntries()]); // [[1, 'a'], [1, 'b'], [2, 'c']];
2020
+ */
2021
+ flatEntries(): IterableIterator<[K, V]>;
2022
+ /**
2023
+ * Returns the entry with the smallest key.
2024
+ * @remarks Time O(log n), Space O(1)
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
+
2077
+
2078
+
2079
+
2080
+
2081
+
2082
+
2083
+
2084
+
2085
+
2086
+
2087
+ * @example
2088
+ * // First entry
2089
+ * const mm = new TreeMultiMap<number, string>();
2090
+ * mm.add(3, 'c');
2091
+ * mm.add(1, 'a');
2092
+ * console.log(mm.first()?.[0]); // 1;
2093
+ */
2094
+ first(): [K, V[]] | undefined;
2095
+ /**
2096
+ * Returns the entry with the largest key.
2097
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
2161
+ * // Last entry
2162
+ * const mm = new TreeMultiMap<number, string>();
2163
+ * mm.add(1, 'a');
2164
+ * mm.add(3, 'c');
2165
+ * console.log(mm.last()?.[0]); // 3;
2166
+ */
2167
+ last(): [K, V[]] | undefined;
2168
+ /**
2169
+ * Removes and returns the entry with the smallest key.
2170
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
2199
+ * // Remove and return first
2200
+ * const mm = new TreeMultiMap<number, string>();
2201
+ * mm.add(2, 'b');
2202
+ * mm.add(1, 'a');
2203
+ * const first = mm.pollFirst();
2204
+ * console.log(first?.[0]); // 1;
2205
+ * console.log(mm.has(1)); // false;
2206
+ */
2207
+ pollFirst(): [K, V[]] | undefined;
2208
+ /**
2209
+ * Removes and returns the entry with the largest key.
2210
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
2239
+ * // Remove and return last
2240
+ * const mm = new TreeMultiMap<number, string>();
2241
+ * mm.add(1, 'a');
2242
+ * mm.add(3, 'c');
2243
+ * const last = mm.pollLast();
2244
+ * console.log(last?.[0]); // 3;
2245
+ */
2246
+ pollLast(): [K, V[]] | undefined;
2247
+ /**
2248
+ * Returns the entry with the smallest key >= given key.
2249
+ * @remarks Time O(log n), Space O(1)
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
+
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
+
2392
+
2393
+
2394
+
2395
+
2396
+
2397
+
2398
+
2399
+
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+
2406
+
2407
+
2408
+
2409
+
2410
+
2411
+ * @example
2412
+ * // Least key ≥ target
2413
+ * const mm = new TreeMultiMap<number, string>();
2414
+ * mm.add(10, 'a');
2415
+ * mm.add(20, 'b');
2416
+ * mm.add(30, 'c');
2417
+ * console.log(mm.ceiling(15)?.[0]); // 20;
2418
+ */
2419
+ ceiling(key: K): [K, V[]] | undefined;
2420
+ /**
2421
+ * Returns the entry with the largest key <= given key.
2422
+ * @remarks Time O(log n), Space O(1)
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
+
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
+
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
+ * @example
2585
+ * // Greatest key ≤ target
2586
+ * const mm = new TreeMultiMap<number, string>();
2587
+ * mm.add(10, 'a');
2588
+ * mm.add(20, 'b');
2589
+ * mm.add(30, 'c');
2590
+ * console.log(mm.floor(25)?.[0]); // 20;
2591
+ */
2592
+ floor(key: K): [K, V[]] | undefined;
2593
+ /**
2594
+ * Returns the entry with the smallest key > given key.
2595
+ * @remarks Time O(log n), Space O(1)
2596
+
2597
+
2598
+
2599
+
2600
+
2601
+
2602
+
2603
+
2604
+
2605
+
2606
+
2607
+
2608
+
2609
+
2610
+
2611
+
2612
+
2613
+
2614
+
2615
+
2616
+
2617
+
2618
+
2619
+
2620
+
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
+
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
+ * @example
2723
+ * // Least key > target
2724
+ * const mm = new TreeMultiMap<number, string>();
2725
+ * mm.add(10, 'a');
2726
+ * mm.add(20, 'b');
2727
+ * console.log(mm.higher(10)?.[0]); // 20;
2728
+ */
2729
+ higher(key: K): [K, V[]] | undefined;
2730
+ /**
2731
+ * Returns the entry with the largest key < given key.
2732
+ * @remarks Time O(log n), Space O(1)
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
+ * @example
2860
+ * // Greatest key < target
2861
+ * const mm = new TreeMultiMap<number, string>();
2862
+ * mm.add(10, 'a');
2863
+ * mm.add(20, 'b');
2864
+ * console.log(mm.lower(20)?.[0]); // 10;
2865
+ */
2866
+ lower(key: K): [K, V[]] | undefined;
2867
+ /**
2868
+ * Prints the internal tree structure (for debugging).
2869
+ * @remarks Time O(n), Space O(n)
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
+
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
+ * @example
3029
+ * // Display tree
3030
+ * const mm = new TreeMultiMap<number, string>();
3031
+ * mm.add(1, 'a');
3032
+ * expect(() => mm.print()).not.toThrow();
3033
+ */
3034
+ print(): void;
3035
+ /**
3036
+ * Executes a callback for each entry.
3037
+ * @remarks Time O(n), Space O(1)
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
+
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
+ * @example
3197
+ * // Iterate entries
3198
+ * const mm = new TreeMultiMap<number, string>();
3199
+ * mm.add(1, 'a');
3200
+ * mm.add(2, 'b');
3201
+ * const keys: number[] = [];
3202
+ * mm.forEach((v, k) => keys.push(k));
3203
+ * console.log(keys); // [1, 2];
3204
+ */
3205
+ forEach(callback: (value: V[], key: K, map: this) => void): void;
3206
+ /**
3207
+ * Creates a new map with entries that pass the predicate.
3208
+ * @remarks Time O(n), Space O(n)
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
+
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
+ * @example
3368
+ * // Filter entries
3369
+ * const mm = new TreeMultiMap<number, string>();
3370
+ * mm.add(1, 'a');
3371
+ * mm.add(2, 'b');
3372
+ * mm.add(3, 'c');
3373
+ * const filtered = mm.filter((v, k) => k > 1);
3374
+ * console.log([...filtered.keys()]); // [2, 3];
3375
+ */
3376
+ filter(predicate: (value: V[], key: K, map: this) => boolean): TreeMultiMap<K, V, R>;
3377
+ /**
3378
+ * Creates a new map by transforming each entry.
3379
+ * @remarks Time O(n log n), Space O(n)
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
+
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
+
3537
+
3538
+ * @example
3539
+ * // Transform values
3540
+ * const mm = new TreeMultiMap<number, string>();
3541
+ * mm.add(1, 'a');
3542
+ * const mapped = mm.map((v, k) => [k, v.map(s => s.toUpperCase())] as [number, string[]]);
3543
+ * console.log(mapped.get(1)); // ['A'];
3544
+ */
3545
+ map<V2>(mapper: (value: V[], key: K, map: this) => [K, V2[]]): TreeMultiMap<K, V2, R>;
3546
+ /**
3547
+ * Reduces all entries to a single value.
3548
+ * @remarks Time O(n), Space O(1)
3549
+
3550
+
3551
+
3552
+
3553
+
3554
+
519
3555
 
520
3556
 
521
3557
 
@@ -554,17 +3590,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
554
3590
 
555
3591
 
556
3592
 
557
- * @example
558
- * // Iterate keys
559
- * const mm = new TreeMultiMap<number, string>();
560
- * mm.add(3, 'c');
561
- * mm.add(1, 'a');
562
- * console.log([...mm.keys()]); // [1, 3];
563
- */
564
- keys(): IterableIterator<K>;
565
- /**
566
- * Iterates over all buckets.
567
- * @remarks Time O(n), Space O(1)
568
3593
 
569
3594
 
570
3595
 
@@ -603,58 +3628,12 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
603
3628
 
604
3629
 
605
3630
 
606
- * @example
607
- * // Iterate value arrays
608
- * const mm = new TreeMultiMap<number, string>();
609
- * mm.add(1, 'a');
610
- * mm.add(1, 'b');
611
- * console.log([...mm.values()]); // [['a', 'b']];
612
- */
613
- values(): IterableIterator<V[]>;
614
- /**
615
- * Iterates over all entries for a specific key.
616
- * @remarks Time O(log n + m), Space O(1) where m is bucket size
617
3631
 
618
3632
 
619
- * @example
620
- * // Get entries for key
621
- * const mm = new TreeMultiMap<number, string>();
622
- * mm.add(1, 'a');
623
- * mm.add(1, 'b');
624
- * console.log([...mm.entriesOf(1)]); // [[1, 'a'], [1, 'b']];
625
- */
626
- entriesOf(key: K): IterableIterator<[K, V]>;
627
- /**
628
- * Iterates over all values for a specific key.
629
- * @remarks Time O(log n + m), Space O(1) where m is bucket size
630
3633
 
631
3634
 
632
- * @example
633
- * // Get flat values for key
634
- * const mm = new TreeMultiMap<number, string>();
635
- * mm.add(1, 'a');
636
- * mm.add(1, 'b');
637
- * console.log([...mm.valuesOf(1)]); // ['a', 'b'];
638
- */
639
- valuesOf(key: K): IterableIterator<V>;
640
- /**
641
- * Iterates over all [key, value] pairs (flattened from buckets).
642
- * @remarks Time O(T), Space O(1) where T is totalSize
643
3635
 
644
3636
 
645
- * @example
646
- * // All key-value pairs flattened
647
- * const mm = new TreeMultiMap<number, string>();
648
- * mm.add(1, 'a');
649
- * mm.add(1, 'b');
650
- * mm.add(2, 'c');
651
- * console.log([...mm.flatEntries()]); // [[1, 'a'], [1, 'b'], [2, 'c']];
652
- */
653
- flatEntries(): IterableIterator<[K, V]>;
654
- /**
655
- * Returns the entry with the smallest key.
656
- * @remarks Time O(log n), Space O(1)
657
-
658
3637
 
659
3638
 
660
3639
 
@@ -668,18 +3647,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
668
3647
 
669
3648
 
670
3649
 
671
- * @example
672
- * // First entry
673
- * const mm = new TreeMultiMap<number, string>();
674
- * mm.add(3, 'c');
675
- * mm.add(1, 'a');
676
- * console.log(mm.first()?.[0]); // 1;
677
- */
678
- first(): [K, V[]] | undefined;
679
- /**
680
- * Returns the entry with the largest key.
681
- * @remarks Time O(log n), Space O(1)
682
-
683
3650
 
684
3651
 
685
3652
 
@@ -693,49 +3660,10 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
693
3660
 
694
3661
 
695
3662
 
696
- * @example
697
- * // Last entry
698
- * const mm = new TreeMultiMap<number, string>();
699
- * mm.add(1, 'a');
700
- * mm.add(3, 'c');
701
- * console.log(mm.last()?.[0]); // 3;
702
- */
703
- last(): [K, V[]] | undefined;
704
- /**
705
- * Removes and returns the entry with the smallest key.
706
- * @remarks Time O(log n), Space O(1)
707
-
708
3663
 
709
3664
 
710
- * @example
711
- * // Remove and return first
712
- * const mm = new TreeMultiMap<number, string>();
713
- * mm.add(2, 'b');
714
- * mm.add(1, 'a');
715
- * const first = mm.pollFirst();
716
- * console.log(first?.[0]); // 1;
717
- * console.log(mm.has(1)); // false;
718
- */
719
- pollFirst(): [K, V[]] | undefined;
720
- /**
721
- * Removes and returns the entry with the largest key.
722
- * @remarks Time O(log n), Space O(1)
723
-
724
3665
 
725
3666
 
726
- * @example
727
- * // Remove and return last
728
- * const mm = new TreeMultiMap<number, string>();
729
- * mm.add(1, 'a');
730
- * mm.add(3, 'c');
731
- * const last = mm.pollLast();
732
- * console.log(last?.[0]); // 3;
733
- */
734
- pollLast(): [K, V[]] | undefined;
735
- /**
736
- * Returns the entry with the smallest key >= given key.
737
- * @remarks Time O(log n), Space O(1)
738
-
739
3667
 
740
3668
 
741
3669
 
@@ -777,18 +3705,31 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
777
3705
 
778
3706
 
779
3707
  * @example
780
- * // Least key ≥ target
781
- * const mm = new TreeMultiMap<number, string>();
782
- * mm.add(10, 'a');
783
- * mm.add(20, 'b');
784
- * mm.add(30, 'c');
785
- * console.log(mm.ceiling(15)?.[0]); // 20;
3708
+ * // Aggregate
3709
+ * const mm = new TreeMultiMap<number, number>();
3710
+ * mm.add(1, 10);
3711
+ * mm.add(2, 20);
3712
+ * const sum = mm.reduce((acc, v) => acc + v.reduce((a, b) => a + b, 0), 0);
3713
+ * console.log(sum); // 30;
786
3714
  */
787
- ceiling(key: K): [K, V[]] | undefined;
3715
+ reduce<U>(callback: (accumulator: U, value: V[], key: K, map: this) => U, initialValue: U): U;
788
3716
  /**
789
- * Returns the entry with the largest key <= given key.
790
- * @remarks Time O(log n), Space O(1)
791
-
3717
+ * Sets multiple entries at once.
3718
+ * @remarks Time O(m log n), Space O(m) where m is input size
3719
+
3720
+
3721
+
3722
+
3723
+
3724
+
3725
+
3726
+
3727
+
3728
+
3729
+
3730
+
3731
+
3732
+
792
3733
 
793
3734
 
794
3735
 
@@ -829,19 +3770,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
829
3770
 
830
3771
 
831
3772
 
832
- * @example
833
- * // Greatest key ≤ target
834
- * const mm = new TreeMultiMap<number, string>();
835
- * mm.add(10, 'a');
836
- * mm.add(20, 'b');
837
- * mm.add(30, 'c');
838
- * console.log(mm.floor(25)?.[0]); // 20;
839
- */
840
- floor(key: K): [K, V[]] | undefined;
841
- /**
842
- * Returns the entry with the smallest key > given key.
843
- * @remarks Time O(log n), Space O(1)
844
-
845
3773
 
846
3774
 
847
3775
 
@@ -871,18 +3799,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
871
3799
 
872
3800
 
873
3801
 
874
- * @example
875
- * // Least key > target
876
- * const mm = new TreeMultiMap<number, string>();
877
- * mm.add(10, 'a');
878
- * mm.add(20, 'b');
879
- * console.log(mm.higher(10)?.[0]); // 20;
880
- */
881
- higher(key: K): [K, V[]] | undefined;
882
- /**
883
- * Returns the entry with the largest key < given key.
884
- * @remarks Time O(log n), Space O(1)
885
-
886
3802
 
887
3803
 
888
3804
 
@@ -912,17 +3828,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
912
3828
 
913
3829
 
914
3830
 
915
- * @example
916
- * // Greatest key < target
917
- * const mm = new TreeMultiMap<number, string>();
918
- * mm.add(10, 'a');
919
- * mm.add(20, 'b');
920
- * console.log(mm.lower(20)?.[0]); // 10;
921
- */
922
- lower(key: K): [K, V[]] | undefined;
923
- /**
924
- * Prints the internal tree structure (for debugging).
925
- * @remarks Time O(n), Space O(n)
926
3831
 
927
3832
 
928
3833
 
@@ -962,15 +3867,27 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
962
3867
 
963
3868
 
964
3869
  * @example
965
- * // Display tree
3870
+ * // Set multiple entries
966
3871
  * const mm = new TreeMultiMap<number, string>();
967
- * mm.add(1, 'a');
968
- * expect(() => mm.print()).not.toThrow();
3872
+ * mm.setMany([[1, ['a']], [2, ['b']]]);
3873
+ * console.log(mm.size); // 2;
969
3874
  */
970
- print(): void;
3875
+ setMany(keysNodesEntriesOrRaws: Iterable<K | [K | null | undefined, V[] | undefined]>): boolean[];
971
3876
  /**
972
- * Executes a callback for each entry.
973
- * @remarks Time O(n), Space O(1)
3877
+ * Searches for entries within a key range.
3878
+ * @remarks Time O(log n + k), Space O(k) where k is result size
3879
+
3880
+
3881
+
3882
+
3883
+
3884
+
3885
+
3886
+
3887
+
3888
+
3889
+
3890
+
974
3891
 
975
3892
 
976
3893
 
@@ -1009,19 +3926,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1009
3926
 
1010
3927
 
1011
3928
 
1012
- * @example
1013
- * // Iterate entries
1014
- * const mm = new TreeMultiMap<number, string>();
1015
- * mm.add(1, 'a');
1016
- * mm.add(2, 'b');
1017
- * const keys: number[] = [];
1018
- * mm.forEach((v, k) => keys.push(k));
1019
- * console.log(keys); // [1, 2];
1020
- */
1021
- forEach(callback: (value: V[], key: K, map: this) => void): void;
1022
- /**
1023
- * Creates a new map with entries that pass the predicate.
1024
- * @remarks Time O(n), Space O(n)
1025
3929
 
1026
3930
 
1027
3931
 
@@ -1060,19 +3964,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1060
3964
 
1061
3965
 
1062
3966
 
1063
- * @example
1064
- * // Filter entries
1065
- * const mm = new TreeMultiMap<number, string>();
1066
- * mm.add(1, 'a');
1067
- * mm.add(2, 'b');
1068
- * mm.add(3, 'c');
1069
- * const filtered = mm.filter((v, k) => k > 1);
1070
- * console.log([...filtered.keys()]); // [2, 3];
1071
- */
1072
- filter(predicate: (value: V[], key: K, map: this) => boolean): TreeMultiMap<K, V, R>;
1073
- /**
1074
- * Creates a new map by transforming each entry.
1075
- * @remarks Time O(n log n), Space O(n)
1076
3967
 
1077
3968
 
1078
3969
 
@@ -1112,16 +4003,38 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1112
4003
 
1113
4004
 
1114
4005
  * @example
1115
- * // Transform values
4006
+ * // Find keys in range
1116
4007
  * const mm = new TreeMultiMap<number, string>();
1117
- * mm.add(1, 'a');
1118
- * const mapped = mm.map((v, k) => [k, v.map(s => s.toUpperCase())] as [number, string[]]);
1119
- * console.log(mapped.get(1)); // ['A'];
4008
+ * mm.add(10, 'a');
4009
+ * mm.add(20, 'b');
4010
+ * mm.add(30, 'c');
4011
+ * const result = mm.rangeSearch([15, 25]);
4012
+ * console.log(result.length); // 1;
1120
4013
  */
1121
- map<V2>(mapper: (value: V[], key: K, map: this) => [K, V2[]]): TreeMultiMap<K, V2, R>;
4014
+ rangeSearch<C extends (node: RedBlackTreeNode<K, V[]>) => unknown>(range: Range<K> | [K, K], callback?: C): ReturnType<C>[];
1122
4015
  /**
1123
- * Reduces all entries to a single value.
1124
- * @remarks Time O(n), Space O(1)
4016
+ * Creates a shallow clone of this map.
4017
+ * @remarks Time O(n log n), Space O(n)
4018
+
4019
+
4020
+
4021
+
4022
+
4023
+
4024
+
4025
+
4026
+
4027
+
4028
+
4029
+
4030
+
4031
+
4032
+
4033
+
4034
+
4035
+
4036
+
4037
+
1125
4038
 
1126
4039
 
1127
4040
 
@@ -1160,18 +4073,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1160
4073
 
1161
4074
 
1162
4075
 
1163
- * @example
1164
- * // Aggregate
1165
- * const mm = new TreeMultiMap<number, number>();
1166
- * mm.add(1, 10);
1167
- * mm.add(2, 20);
1168
- * const sum = mm.reduce((acc, v) => acc + v.reduce((a, b) => a + b, 0), 0);
1169
- * console.log(sum); // 30;
1170
- */
1171
- reduce<U>(callback: (accumulator: U, value: V[], key: K, map: this) => U, initialValue: U): U;
1172
- /**
1173
- * Sets multiple entries at once.
1174
- * @remarks Time O(m log n), Space O(m) where m is input size
1175
4076
 
1176
4077
 
1177
4078
 
@@ -1202,16 +4103,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1202
4103
 
1203
4104
 
1204
4105
 
1205
- * @example
1206
- * // Set multiple entries
1207
- * const mm = new TreeMultiMap<number, string>();
1208
- * mm.setMany([[1, ['a']], [2, ['b']]]);
1209
- * console.log(mm.size); // 2;
1210
- */
1211
- setMany(keysNodesEntriesOrRaws: Iterable<K | [K | null | undefined, V[] | undefined]>): boolean[];
1212
- /**
1213
- * Searches for entries within a key range.
1214
- * @remarks Time O(log n + k), Space O(k) where k is result size
1215
4106
 
1216
4107
 
1217
4108
 
@@ -1242,19 +4133,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1242
4133
 
1243
4134
 
1244
4135
 
1245
- * @example
1246
- * // Find keys in range
1247
- * const mm = new TreeMultiMap<number, string>();
1248
- * mm.add(10, 'a');
1249
- * mm.add(20, 'b');
1250
- * mm.add(30, 'c');
1251
- * const result = mm.rangeSearch([15, 25]);
1252
- * console.log(result.length); // 1;
1253
- */
1254
- rangeSearch<C extends (node: RedBlackTreeNode<K, V[]>) => unknown>(range: Range<K> | [K, K], callback?: C): ReturnType<C>[];
1255
- /**
1256
- * Creates a shallow clone of this map.
1257
- * @remarks Time O(n log n), Space O(n)
1258
4136
 
1259
4137
 
1260
4138
 
@@ -1294,13 +4172,60 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1294
4172
 
1295
4173
 
1296
4174
  * @example
1297
- * // Deep clone
1298
- * const mm = new TreeMultiMap<number, string>();
1299
- * mm.add(1, 'a');
1300
- * const copy = mm.clone();
1301
- * copy.delete(1);
1302
- * console.log(mm.has(1)); // true;
4175
+ * // Order-statistic on BST
4176
+ * const tree = new TreeMultiMap<number>([30, 10, 50, 20, 40], { enableOrderStatistic: true });
4177
+ * console.log(tree.getByRank(0)); // 10;
4178
+ * console.log(tree.getByRank(4)); // 50;
4179
+ * console.log(tree.getRank(30)); // 2;
1303
4180
  */
4181
+ getByRank(k: number): [K, V[]] | undefined;
4182
+ /**
4183
+ * Get the rank of a key in sorted order
4184
+ * @example
4185
+ * // Get the rank of a key in sorted order
4186
+ * const tree = new TreeMultiMap<number>(
4187
+ * [10, 20, 30, 40, 50],
4188
+ * { enableOrderStatistic: true }
4189
+ * );
4190
+ * console.log(tree.getRank(10)); // 0; // smallest → rank 0
4191
+ * console.log(tree.getRank(30)); // 2; // 2 elements before 30 in tree order
4192
+ * console.log(tree.getRank(50)); // 4; // largest → rank 4
4193
+ * console.log(tree.getRank(25)); // 2;
4194
+ */
4195
+ getRank(key: K): number;
4196
+ /**
4197
+ * Get elements by rank range
4198
+
4199
+ * @example
4200
+ * // Pagination with rangeByRank
4201
+ * const tree = new TreeMultiMap<number>(
4202
+ * [10, 20, 30, 40, 50, 60, 70, 80, 90],
4203
+ * { enableOrderStatistic: true }
4204
+ * );
4205
+ * const pageSize = 3;
4206
+ *
4207
+ * // Page 1
4208
+ * console.log(tree.rangeByRank(0, pageSize - 1)); // [10, 20, 30];
4209
+ * // Page 2
4210
+ * console.log(tree.rangeByRank(pageSize, 2 * pageSize - 1)); // [40, 50, 60];
4211
+ * // Page 3
4212
+ * console.log(tree.rangeByRank(2 * pageSize, 3 * pageSize - 1)); // [70, 80, 90];
4213
+ */
4214
+ rangeByRank(start: number, end: number): Array<[K, V[]]>;
4215
+ /**
4216
+ * Deep copy
4217
+
4218
+
4219
+
4220
+
4221
+ * @example
4222
+ * // Deep clone
4223
+ * const mm = new TreeMultiMap<number, string>();
4224
+ * mm.add(1, 'a');
4225
+ * const copy = mm.clone();
4226
+ * copy.delete(1);
4227
+ * console.log(mm.has(1)); // true;
4228
+ */
1304
4229
  clone(): TreeMultiMap<K, V, R>;
1305
4230
  /**
1306
4231
  * Expose comparator for advanced usage/testing (read-only).