binary-tree-typed 2.5.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/dist/cjs/index.cjs +609 -0
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs-legacy/index.cjs +609 -0
  4. package/dist/cjs-legacy/index.cjs.map +1 -1
  5. package/dist/esm/index.mjs +609 -0
  6. package/dist/esm/index.mjs.map +1 -1
  7. package/dist/esm-legacy/index.mjs +609 -0
  8. package/dist/esm-legacy/index.mjs.map +1 -1
  9. package/dist/types/data-structures/base/index.d.ts +1 -0
  10. package/dist/types/data-structures/base/iterable-entry-base.d.ts +8 -8
  11. package/dist/types/data-structures/base/linear-base.d.ts +3 -3
  12. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +252 -0
  13. package/dist/types/data-structures/binary-tree/binary-indexed-tree.d.ts +294 -0
  14. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +527 -2
  15. package/dist/types/data-structures/binary-tree/bst.d.ts +505 -1
  16. package/dist/types/data-structures/binary-tree/red-black-tree.d.ts +399 -0
  17. package/dist/types/data-structures/binary-tree/segment-tree.d.ts +126 -1
  18. package/dist/types/data-structures/binary-tree/tree-map.d.ts +2881 -382
  19. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +2867 -347
  20. package/dist/types/data-structures/binary-tree/tree-multi-set.d.ts +2328 -312
  21. package/dist/types/data-structures/binary-tree/tree-set.d.ts +2671 -277
  22. package/dist/types/data-structures/graph/abstract-graph.d.ts +4 -4
  23. package/dist/types/data-structures/graph/directed-graph.d.ts +210 -0
  24. package/dist/types/data-structures/graph/undirected-graph.d.ts +189 -0
  25. package/dist/types/data-structures/hash/hash-map.d.ts +241 -10
  26. package/dist/types/data-structures/heap/heap.d.ts +294 -0
  27. package/dist/types/data-structures/linked-list/doubly-linked-list.d.ts +360 -3
  28. package/dist/types/data-structures/linked-list/singly-linked-list.d.ts +318 -3
  29. package/dist/types/data-structures/linked-list/skip-linked-list.d.ts +380 -2
  30. package/dist/types/data-structures/matrix/matrix.d.ts +168 -0
  31. package/dist/types/data-structures/queue/deque.d.ts +319 -4
  32. package/dist/types/data-structures/queue/queue.d.ts +252 -0
  33. package/dist/types/data-structures/stack/stack.d.ts +210 -0
  34. package/dist/types/data-structures/trie/trie.d.ts +256 -4
  35. package/dist/types/interfaces/graph.d.ts +1 -1
  36. package/dist/types/types/common.d.ts +2 -2
  37. package/dist/types/types/data-structures/heap/heap.d.ts +1 -0
  38. package/dist/types/types/data-structures/priority-queue/priority-queue.d.ts +1 -0
  39. package/dist/types/types/utils/validate-type.d.ts +4 -4
  40. package/dist/umd/binary-tree-typed.js +609 -0
  41. package/dist/umd/binary-tree-typed.js.map +1 -1
  42. package/dist/umd/binary-tree-typed.min.js +5 -5
  43. package/dist/umd/binary-tree-typed.min.js.map +1 -1
  44. package/package.json +2 -2
  45. package/src/data-structures/base/index.ts +1 -0
  46. package/src/data-structures/base/iterable-entry-base.ts +8 -8
  47. package/src/data-structures/base/linear-base.ts +3 -3
  48. package/src/data-structures/binary-tree/avl-tree.ts +252 -0
  49. package/src/data-structures/binary-tree/binary-indexed-tree.ts +295 -1
  50. package/src/data-structures/binary-tree/binary-tree.ts +527 -2
  51. package/src/data-structures/binary-tree/bst.ts +505 -1
  52. package/src/data-structures/binary-tree/red-black-tree.ts +399 -0
  53. package/src/data-structures/binary-tree/segment-tree.ts +127 -2
  54. package/src/data-structures/binary-tree/tree-map.ts +2958 -459
  55. package/src/data-structures/binary-tree/tree-multi-map.ts +3069 -549
  56. package/src/data-structures/binary-tree/tree-multi-set.ts +2476 -460
  57. package/src/data-structures/binary-tree/tree-set.ts +2816 -422
  58. package/src/data-structures/graph/abstract-graph.ts +4 -4
  59. package/src/data-structures/graph/directed-graph.ts +210 -0
  60. package/src/data-structures/graph/undirected-graph.ts +189 -0
  61. package/src/data-structures/hash/hash-map.ts +246 -15
  62. package/src/data-structures/heap/heap.ts +294 -0
  63. package/src/data-structures/linked-list/doubly-linked-list.ts +360 -3
  64. package/src/data-structures/linked-list/singly-linked-list.ts +318 -3
  65. package/src/data-structures/linked-list/skip-linked-list.ts +380 -2
  66. package/src/data-structures/matrix/matrix.ts +169 -1
  67. package/src/data-structures/queue/deque.ts +320 -5
  68. package/src/data-structures/queue/queue.ts +252 -0
  69. package/src/data-structures/stack/stack.ts +210 -0
  70. package/src/data-structures/trie/trie.ts +257 -5
  71. package/src/interfaces/graph.ts +1 -1
  72. package/src/types/common.ts +2 -2
  73. package/src/types/data-structures/heap/heap.ts +1 -0
  74. package/src/types/data-structures/priority-queue/priority-queue.ts +1 -0
  75. package/src/types/utils/validate-type.ts +4 -4
@@ -68,6 +68,111 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
68
68
 
69
69
 
70
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
+
71
176
 
72
177
 
73
178
 
@@ -135,44 +240,2634 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
135
240
 
136
241
 
137
242
 
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
243
 
150
244
 
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
245
 
163
246
 
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)
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+
256
+
257
+
258
+
259
+
260
+
261
+
262
+
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+
272
+
273
+
274
+
275
+
276
+
277
+
278
+
279
+
280
+
281
+
282
+
283
+
284
+
285
+
286
+
287
+
288
+
289
+
290
+
291
+
292
+
293
+
294
+
295
+
296
+
297
+
298
+
299
+
300
+
301
+
302
+
303
+
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
326
+
327
+
328
+
329
+
330
+
331
+
332
+
333
+
334
+
335
+
336
+
337
+
338
+
339
+
340
+
341
+
342
+
343
+
344
+
345
+
346
+
347
+
348
+ * @example
349
+ * // Remove all entries
350
+ * const mm = new TreeMultiMap<number, string>();
351
+ * mm.add(1, 'a');
352
+ * mm.clear();
353
+ * console.log(mm.isEmpty()); // true;
354
+ */
355
+ clear(): void;
356
+ /**
357
+ * Bucket length for a key (missing => 0).
358
+ * @remarks Time O(log n), Space O(1)
359
+
360
+
361
+
362
+
363
+
364
+
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+ * @example
383
+ * // Count values for key
384
+ * const mm = new TreeMultiMap<number, string>();
385
+ * mm.add(1, 'a');
386
+ * mm.add(1, 'b');
387
+ * console.log(mm.count(1)); // 2;
388
+ */
389
+ count(key: K): number;
390
+ /**
391
+ * Total number of values across all buckets (Σ bucket.length).
392
+ * @remarks Time O(n), Space O(1)
393
+
394
+
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+ * @example
417
+ * // Total number of values
418
+ * const mm = new TreeMultiMap<number, string>();
419
+ * mm.add(1, 'a');
420
+ * mm.add(1, 'b');
421
+ * mm.add(2, 'c');
422
+ * console.log(mm.totalSize); // 3;
423
+ */
424
+ get totalSize(): number;
425
+ /**
426
+ * Whether the map contains the given key.
427
+ * @remarks Time O(log n), Space O(1)
428
+
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+
438
+
439
+
440
+
441
+
442
+
443
+
444
+
445
+
446
+
447
+
448
+
449
+
450
+
451
+
452
+
453
+
454
+
455
+
456
+
457
+
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+
476
+
477
+
478
+
479
+
480
+
481
+
482
+
483
+
484
+
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+
494
+
495
+
496
+
497
+
498
+
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+
510
+
511
+
512
+
513
+
514
+
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+
523
+
524
+
525
+
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+
534
+
535
+
536
+
537
+
538
+
539
+
540
+
541
+
542
+
543
+
544
+
545
+
546
+
547
+
548
+
549
+
550
+
551
+
552
+
553
+
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+
563
+
564
+
565
+
566
+
567
+
568
+
569
+
570
+
571
+
572
+
573
+
574
+
575
+
576
+
577
+
578
+
579
+
580
+
581
+
582
+
583
+
584
+
585
+
586
+
587
+
588
+
589
+
590
+
591
+
592
+
593
+
594
+
595
+
596
+
597
+
598
+
599
+
600
+
601
+
602
+
603
+
604
+
605
+
606
+ * @example
607
+ * // Check key existence
608
+ * const mm = new TreeMultiMap<number, string>();
609
+ * mm.add(1, 'a');
610
+ * console.log(mm.has(1)); // true;
611
+ * console.log(mm.has(2)); // false;
612
+ */
613
+ has(key: K): boolean;
614
+ /**
615
+ * Live bucket reference (do not auto-delete key if bucket becomes empty via mutation).
616
+ * @remarks Time O(log n), Space O(1)
617
+
618
+
619
+
620
+
621
+
622
+
623
+
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+
632
+
633
+
634
+
635
+
636
+
637
+
638
+
639
+
640
+
641
+
642
+
643
+
644
+
645
+
646
+
647
+
648
+
649
+
650
+
651
+
652
+
653
+
654
+
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+
663
+
664
+
665
+
666
+
667
+
668
+
669
+
670
+
671
+
672
+
673
+
674
+
675
+
676
+
677
+
678
+
679
+
680
+
681
+
682
+
683
+
684
+
685
+
686
+
687
+
688
+
689
+
690
+
691
+
692
+
693
+
694
+
695
+
696
+
697
+
698
+
699
+
700
+
701
+
702
+
703
+
704
+
705
+
706
+
707
+
708
+
709
+
710
+
711
+
712
+
713
+
714
+
715
+
716
+
717
+
718
+
719
+
720
+
721
+
722
+
723
+
724
+
725
+
726
+
727
+
728
+
729
+
730
+
731
+
732
+
733
+
734
+
735
+
736
+
737
+
738
+
739
+
740
+
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+
768
+
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+
787
+
788
+
789
+
790
+
791
+
792
+
793
+
794
+
795
+ * @example
796
+ * // Get values for key
797
+ * const mm = new TreeMultiMap<number, string>();
798
+ * mm.add(1, 'a');
799
+ * mm.add(1, 'b');
800
+ * console.log(mm.get(1)); // ['a', 'b'];
801
+ */
802
+ get(key: K): V[] | undefined;
803
+ /**
804
+ * Append a single value.
805
+ * @remarks Time O(log n), Space O(1)
806
+
807
+
808
+
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
820
+
821
+
822
+
823
+
824
+
825
+
826
+
827
+
828
+
829
+
830
+
831
+
832
+
833
+
834
+
835
+
836
+
837
+
838
+
839
+
840
+
841
+
842
+
843
+
844
+
845
+
846
+
847
+
848
+
849
+
850
+
851
+
852
+
853
+
854
+
855
+
856
+
857
+
858
+
859
+
860
+
861
+
862
+
863
+
864
+
865
+
866
+
867
+
868
+
869
+
870
+
871
+
872
+
873
+
874
+
875
+
876
+
877
+
878
+
879
+
880
+
881
+
882
+
883
+
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+
892
+
893
+
894
+
895
+
896
+
897
+
898
+
899
+
900
+
901
+
902
+
903
+
904
+
905
+
906
+
907
+
908
+
909
+
910
+
911
+
912
+
913
+
914
+
915
+
916
+
917
+
918
+
919
+
920
+
921
+
922
+
923
+
924
+
925
+
926
+
927
+
928
+
929
+
930
+
931
+
932
+
933
+
934
+
935
+
936
+
937
+
938
+
939
+
940
+
941
+
942
+
943
+ * @example
944
+ * // Add key-value pair
945
+ * const mm = new TreeMultiMap<number, string>();
946
+ * mm.add(1, 'a');
947
+ * mm.add(1, 'b');
948
+ * mm.add(2, 'c');
949
+ * console.log(mm.get(1)); // ['a', 'b'];
950
+ */
951
+ add(key: K, value: V): boolean;
952
+ /**
953
+ * Alias for compatibility with existing TreeMultiMap semantics.
954
+ * @remarks Time O(log n), Space O(1) for single value; O(log n + m) for bucket append
955
+
956
+
957
+
958
+
959
+
960
+
961
+
962
+
963
+
964
+
965
+
966
+
967
+
968
+
969
+
970
+
971
+
972
+
973
+
974
+
975
+
976
+
977
+
978
+
979
+
980
+
981
+
982
+
983
+
984
+
985
+
986
+
987
+
988
+
989
+
990
+
991
+
992
+
993
+
994
+
995
+
996
+
997
+
998
+
999
+
1000
+
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+
1020
+
1021
+
1022
+
1023
+
1024
+
1025
+
1026
+
1027
+
1028
+
1029
+
1030
+
1031
+
1032
+
1033
+
1034
+
1035
+
1036
+
1037
+
1038
+
1039
+
1040
+
1041
+
1042
+
1043
+
1044
+
1045
+
1046
+
1047
+
1048
+
1049
+
1050
+
1051
+
1052
+
1053
+
1054
+
1055
+
1056
+
1057
+
1058
+
1059
+
1060
+
1061
+
1062
+
1063
+
1064
+
1065
+
1066
+
1067
+
1068
+
1069
+
1070
+
1071
+
1072
+
1073
+
1074
+
1075
+
1076
+
1077
+
1078
+
1079
+
1080
+
1081
+
1082
+
1083
+
1084
+
1085
+
1086
+
1087
+
1088
+
1089
+
1090
+
1091
+
1092
+
1093
+
1094
+
1095
+
1096
+
1097
+
1098
+
1099
+
1100
+
1101
+
1102
+
1103
+
1104
+
1105
+
1106
+
1107
+
1108
+
1109
+
1110
+
1111
+
1112
+
1113
+
1114
+
1115
+
1116
+
1117
+
1118
+
1119
+
1120
+
1121
+
1122
+
1123
+
1124
+
1125
+
1126
+
1127
+
1128
+
1129
+
1130
+
1131
+ * @example
1132
+ * // Set values for key
1133
+ * const mm = new TreeMultiMap<number, string>();
1134
+ * mm.set(1, 'a');
1135
+ * mm.set(1, 'b');
1136
+ * console.log(mm.get(1)); // ['a', 'b'];
1137
+ */
1138
+ set(entry: [K | null | undefined, V[] | undefined] | K | null | undefined, value?: V): boolean;
1139
+ set(key: K, value: V): boolean;
1140
+ /**
1141
+ * Deletes a key and its entire bucket.
1142
+ * @remarks Time O(log n), Space O(1)
1143
+
1144
+
1145
+
1146
+
1147
+
1148
+
1149
+
1150
+
1151
+
1152
+
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+
1160
+
1161
+
1162
+
1163
+
1164
+
1165
+
1166
+
1167
+
1168
+
1169
+
1170
+
1171
+
1172
+
1173
+
1174
+
1175
+
1176
+
1177
+
1178
+
1179
+
1180
+
1181
+
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+
1188
+
1189
+
1190
+
1191
+
1192
+
1193
+
1194
+
1195
+
1196
+
1197
+
1198
+
1199
+
1200
+
1201
+
1202
+
1203
+
1204
+
1205
+
1206
+
1207
+
1208
+
1209
+
1210
+
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+
1217
+
1218
+
1219
+
1220
+
1221
+
1222
+
1223
+
1224
+
1225
+
1226
+
1227
+
1228
+
1229
+
1230
+
1231
+
1232
+
1233
+
1234
+
1235
+
1236
+
1237
+
1238
+
1239
+
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+
1280
+
1281
+
1282
+
1283
+
1284
+
1285
+
1286
+
1287
+
1288
+
1289
+
1290
+
1291
+
1292
+
1293
+
1294
+
1295
+
1296
+
1297
+
1298
+
1299
+
1300
+
1301
+
1302
+
1303
+
1304
+
1305
+
1306
+
1307
+
1308
+
1309
+
1310
+
1311
+
1312
+
1313
+
1314
+
1315
+
1316
+
1317
+
1318
+
1319
+
1320
+
1321
+ * @example
1322
+ * // Remove key
1323
+ * const mm = new TreeMultiMap<number, string>();
1324
+ * mm.add(1, 'a');
1325
+ * mm.add(2, 'b');
1326
+ * mm.delete(1);
1327
+ * console.log(mm.has(1)); // false;
1328
+ */
1329
+ delete(key: K): boolean;
1330
+ /**
1331
+ * Check if a specific value exists in a key's bucket.
1332
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
1333
+
1334
+
1335
+
1336
+
1337
+
1338
+
1339
+
1340
+
1341
+
1342
+
1343
+
1344
+
1345
+
1346
+
1347
+
1348
+
1349
+
1350
+
1351
+
1352
+
1353
+
1354
+
1355
+
1356
+ * @example
1357
+ * // Check specific key-value
1358
+ * const mm = new TreeMultiMap<number, string>();
1359
+ * mm.add(1, 'a');
1360
+ * console.log(mm.hasEntry(1, 'a')); // true;
1361
+ * console.log(mm.hasEntry(1, 'z')); // false;
1362
+ */
1363
+ hasEntry(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
1364
+ /**
1365
+ * Delete a single occurrence of a value from a key's bucket.
1366
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
1367
+
1368
+
1369
+
1370
+
1371
+
1372
+
1373
+
1374
+
1375
+
1376
+
1377
+
1378
+
1379
+
1380
+
1381
+
1382
+
1383
+
1384
+
1385
+
1386
+
1387
+
1388
+
1389
+
1390
+ * @example
1391
+ * // Delete specific value
1392
+ * const mm = new TreeMultiMap<number, string>();
1393
+ * mm.add(1, 'a');
1394
+ * mm.add(1, 'b');
1395
+ * mm.deleteValue(1, 'a');
1396
+ * console.log(mm.get(1)); // ['b'];
1397
+ */
1398
+ deleteValue(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
1399
+ /**
1400
+ * Delete all occurrences of a value from a key's bucket.
1401
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
1402
+
1403
+
1404
+
1405
+
1406
+
1407
+
1408
+
1409
+
1410
+
1411
+
1412
+
1413
+
1414
+
1415
+
1416
+
1417
+
1418
+
1419
+
1420
+
1421
+
1422
+
1423
+
1424
+
1425
+ * @example
1426
+ * // Delete all matching values
1427
+ * const mm = new TreeMultiMap<number, string>();
1428
+ * mm.add(1, 'a');
1429
+ * mm.add(1, 'a');
1430
+ * mm.add(1, 'b');
1431
+ * const count = mm.deleteValues(1, 'a');
1432
+ * console.log(count); // 2;
1433
+ */
1434
+ deleteValues(key: K, value: V, eq?: (a: V, b: V) => boolean): number;
1435
+ /**
1436
+ * Iterates over all entries as [key, bucket] pairs.
1437
+ * @remarks Time O(n), Space O(1)
1438
+ */
1439
+ [Symbol.iterator](): Iterator<[K, V[]]>;
1440
+ /**
1441
+ * Iterates over all keys.
1442
+ * @remarks Time O(n), Space O(1)
1443
+
1444
+
1445
+
1446
+
1447
+
1448
+
1449
+
1450
+
1451
+
1452
+
1453
+
1454
+
1455
+
1456
+
1457
+
1458
+
1459
+
1460
+
1461
+
1462
+
1463
+
1464
+
1465
+
1466
+
1467
+
1468
+
1469
+
1470
+
1471
+
1472
+
1473
+
1474
+
1475
+
1476
+
1477
+
1478
+
1479
+
1480
+
1481
+
1482
+
1483
+
1484
+
1485
+
1486
+
1487
+
1488
+
1489
+
1490
+
1491
+
1492
+
1493
+
1494
+
1495
+
1496
+
1497
+
1498
+
1499
+
1500
+
1501
+
1502
+
1503
+
1504
+
1505
+
1506
+
1507
+
1508
+
1509
+
1510
+
1511
+
1512
+
1513
+
1514
+
1515
+
1516
+
1517
+
1518
+
1519
+
1520
+
1521
+
1522
+
1523
+
1524
+
1525
+
1526
+
1527
+
1528
+
1529
+
1530
+
1531
+
1532
+
1533
+
1534
+
1535
+
1536
+
1537
+
1538
+
1539
+
1540
+
1541
+
1542
+
1543
+
1544
+
1545
+
1546
+
1547
+
1548
+
1549
+
1550
+
1551
+
1552
+
1553
+
1554
+
1555
+
1556
+
1557
+
1558
+
1559
+
1560
+
1561
+
1562
+
1563
+
1564
+
1565
+
1566
+
1567
+
1568
+
1569
+
1570
+
1571
+
1572
+
1573
+
1574
+
1575
+
1576
+
1577
+
1578
+
1579
+
1580
+
1581
+
1582
+
1583
+
1584
+
1585
+
1586
+ * @example
1587
+ * // Iterate keys
1588
+ * const mm = new TreeMultiMap<number, string>();
1589
+ * mm.add(3, 'c');
1590
+ * mm.add(1, 'a');
1591
+ * console.log([...mm.keys()]); // [1, 3];
1592
+ */
1593
+ keys(): IterableIterator<K>;
1594
+ /**
1595
+ * Iterates over all buckets.
1596
+ * @remarks Time O(n), Space O(1)
1597
+
1598
+
1599
+
1600
+
1601
+
1602
+
1603
+
1604
+
1605
+
1606
+
1607
+
1608
+
1609
+
1610
+
1611
+
1612
+
1613
+
1614
+
1615
+
1616
+
1617
+
1618
+
1619
+
1620
+
1621
+
1622
+
1623
+
1624
+
1625
+
1626
+
1627
+
1628
+
1629
+
1630
+
1631
+
1632
+
1633
+
1634
+
1635
+
1636
+
1637
+
1638
+
1639
+
1640
+
1641
+
1642
+
1643
+
1644
+
1645
+
1646
+
1647
+
1648
+
1649
+
1650
+
1651
+
1652
+
1653
+
1654
+
1655
+
1656
+
1657
+
1658
+
1659
+
1660
+
1661
+
1662
+
1663
+
1664
+
1665
+
1666
+
1667
+
1668
+
1669
+
1670
+
1671
+
1672
+
1673
+
1674
+
1675
+
1676
+
1677
+
1678
+
1679
+
1680
+
1681
+
1682
+
1683
+
1684
+
1685
+
1686
+
1687
+
1688
+
1689
+
1690
+
1691
+
1692
+
1693
+
1694
+
1695
+
1696
+
1697
+
1698
+
1699
+
1700
+
1701
+
1702
+
1703
+
1704
+
1705
+
1706
+
1707
+
1708
+
1709
+
1710
+
1711
+
1712
+
1713
+
1714
+
1715
+
1716
+
1717
+
1718
+
1719
+
1720
+
1721
+
1722
+
1723
+
1724
+
1725
+
1726
+
1727
+
1728
+
1729
+
1730
+
1731
+
1732
+
1733
+
1734
+
1735
+
1736
+
1737
+
1738
+
1739
+
1740
+ * @example
1741
+ * // Iterate value arrays
1742
+ * const mm = new TreeMultiMap<number, string>();
1743
+ * mm.add(1, 'a');
1744
+ * mm.add(1, 'b');
1745
+ * console.log([...mm.values()]); // [['a', 'b']];
1746
+ */
1747
+ values(): IterableIterator<V[]>;
1748
+ /**
1749
+ * Iterates over all entries for a specific key.
1750
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
1751
+
1752
+
1753
+
1754
+
1755
+
1756
+
1757
+
1758
+
1759
+
1760
+
1761
+
1762
+
1763
+
1764
+
1765
+
1766
+
1767
+
1768
+
1769
+
1770
+
1771
+
1772
+
1773
+
1774
+ * @example
1775
+ * // Get entries for key
1776
+ * const mm = new TreeMultiMap<number, string>();
1777
+ * mm.add(1, 'a');
1778
+ * mm.add(1, 'b');
1779
+ * console.log([...mm.entriesOf(1)]); // [[1, 'a'], [1, 'b']];
1780
+ */
1781
+ entriesOf(key: K): IterableIterator<[K, V]>;
1782
+ /**
1783
+ * Iterates over all values for a specific key.
1784
+ * @remarks Time O(log n + m), Space O(1) where m is bucket size
1785
+
1786
+
1787
+
1788
+
1789
+
1790
+
1791
+
1792
+
1793
+
1794
+
1795
+
1796
+
1797
+
1798
+
1799
+
1800
+
1801
+
1802
+
1803
+
1804
+
1805
+
1806
+
1807
+
1808
+ * @example
1809
+ * // Get flat values for key
1810
+ * const mm = new TreeMultiMap<number, string>();
1811
+ * mm.add(1, 'a');
1812
+ * mm.add(1, 'b');
1813
+ * console.log([...mm.valuesOf(1)]); // ['a', 'b'];
1814
+ */
1815
+ valuesOf(key: K): IterableIterator<V>;
1816
+ /**
1817
+ * Iterates over all [key, value] pairs (flattened from buckets).
1818
+ * @remarks Time O(T), Space O(1) where T is totalSize
1819
+
1820
+
1821
+
1822
+
1823
+
1824
+
1825
+
1826
+
1827
+
1828
+
1829
+
1830
+
1831
+
1832
+
1833
+
1834
+
1835
+
1836
+
1837
+
1838
+
1839
+
1840
+
1841
+
1842
+ * @example
1843
+ * // All key-value pairs flattened
1844
+ * const mm = new TreeMultiMap<number, string>();
1845
+ * mm.add(1, 'a');
1846
+ * mm.add(1, 'b');
1847
+ * mm.add(2, 'c');
1848
+ * console.log([...mm.flatEntries()]); // [[1, 'a'], [1, 'b'], [2, 'c']];
1849
+ */
1850
+ flatEntries(): IterableIterator<[K, V]>;
1851
+ /**
1852
+ * Returns the entry with the smallest key.
1853
+ * @remarks Time O(log n), Space O(1)
1854
+
1855
+
1856
+
1857
+
1858
+
1859
+
1860
+
1861
+
1862
+
1863
+
1864
+
1865
+
1866
+
1867
+
1868
+
1869
+
1870
+
1871
+
1872
+
1873
+
1874
+
1875
+
1876
+
1877
+
1878
+
1879
+
1880
+
1881
+
1882
+
1883
+
1884
+
1885
+
1886
+
1887
+
1888
+
1889
+
1890
+
1891
+
1892
+
1893
+
1894
+
1895
+
1896
+
1897
+
1898
+
1899
+
1900
+
1901
+
1902
+
1903
+
1904
+
1905
+
1906
+
1907
+
1908
+
1909
+
1910
+ * @example
1911
+ * // First entry
1912
+ * const mm = new TreeMultiMap<number, string>();
1913
+ * mm.add(3, 'c');
1914
+ * mm.add(1, 'a');
1915
+ * console.log(mm.first()?.[0]); // 1;
1916
+ */
1917
+ first(): [K, V[]] | undefined;
1918
+ /**
1919
+ * Returns the entry with the largest key.
1920
+ * @remarks Time O(log n), Space O(1)
1921
+
1922
+
1923
+
1924
+
1925
+
1926
+
1927
+
1928
+
1929
+
1930
+
1931
+
1932
+
1933
+
1934
+
1935
+
1936
+
1937
+
1938
+
1939
+
1940
+
1941
+
1942
+
1943
+
1944
+
1945
+
1946
+
1947
+
1948
+
1949
+
1950
+
1951
+
1952
+
1953
+
1954
+
1955
+
1956
+
1957
+
1958
+
1959
+
1960
+
1961
+
1962
+
1963
+
1964
+
1965
+
1966
+
1967
+
1968
+
1969
+
1970
+
1971
+
1972
+
1973
+
1974
+
1975
+
1976
+
1977
+ * @example
1978
+ * // Last entry
1979
+ * const mm = new TreeMultiMap<number, string>();
1980
+ * mm.add(1, 'a');
1981
+ * mm.add(3, 'c');
1982
+ * console.log(mm.last()?.[0]); // 3;
1983
+ */
1984
+ last(): [K, V[]] | undefined;
1985
+ /**
1986
+ * Removes and returns the entry with the smallest key.
1987
+ * @remarks Time O(log n), Space O(1)
1988
+
1989
+
1990
+
1991
+
1992
+
1993
+
1994
+
1995
+
1996
+
1997
+
1998
+
1999
+
2000
+
2001
+
2002
+
2003
+
2004
+
2005
+
2006
+
2007
+
2008
+
2009
+
2010
+
2011
+
2012
+ * @example
2013
+ * // Remove and return first
2014
+ * const mm = new TreeMultiMap<number, string>();
2015
+ * mm.add(2, 'b');
2016
+ * mm.add(1, 'a');
2017
+ * const first = mm.pollFirst();
2018
+ * console.log(first?.[0]); // 1;
2019
+ * console.log(mm.has(1)); // false;
2020
+ */
2021
+ pollFirst(): [K, V[]] | undefined;
2022
+ /**
2023
+ * Removes and returns the entry with the largest 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
+ * @example
2050
+ * // Remove and return last
2051
+ * const mm = new TreeMultiMap<number, string>();
2052
+ * mm.add(1, 'a');
2053
+ * mm.add(3, 'c');
2054
+ * const last = mm.pollLast();
2055
+ * console.log(last?.[0]); // 3;
2056
+ */
2057
+ pollLast(): [K, V[]] | undefined;
2058
+ /**
2059
+ * Returns the entry with the smallest key >= given key.
2060
+ * @remarks Time O(log n), Space O(1)
2061
+
2062
+
2063
+
2064
+
2065
+
2066
+
2067
+
2068
+
2069
+
2070
+
2071
+
2072
+
2073
+
2074
+
2075
+
2076
+
2077
+
2078
+
2079
+
2080
+
2081
+
2082
+
2083
+
2084
+
2085
+
2086
+
2087
+
2088
+
2089
+
2090
+
2091
+
2092
+
2093
+
2094
+
2095
+
2096
+
2097
+
2098
+
2099
+
2100
+
2101
+
2102
+
2103
+
2104
+
2105
+
2106
+
2107
+
2108
+
2109
+
2110
+
2111
+
2112
+
2113
+
2114
+
2115
+
2116
+
2117
+
2118
+
2119
+
2120
+
2121
+
2122
+
2123
+
2124
+
2125
+
2126
+
2127
+
2128
+
2129
+
2130
+
2131
+
2132
+
2133
+
2134
+
2135
+
2136
+
2137
+
2138
+
2139
+
2140
+
2141
+
2142
+
2143
+
2144
+
2145
+
2146
+
2147
+
2148
+
2149
+
2150
+
2151
+
2152
+
2153
+
2154
+
2155
+
2156
+
2157
+
2158
+
2159
+
2160
+
2161
+
2162
+
2163
+
2164
+
2165
+
2166
+
2167
+
2168
+
2169
+
2170
+
2171
+
2172
+
2173
+
2174
+
2175
+
2176
+
2177
+
2178
+
2179
+
2180
+
2181
+
2182
+
2183
+
2184
+
2185
+
2186
+
2187
+
2188
+
2189
+
2190
+
2191
+
2192
+
2193
+
2194
+
2195
+
2196
+
2197
+
2198
+
2199
+
2200
+
2201
+
2202
+
2203
+
2204
+
2205
+
2206
+
2207
+ * @example
2208
+ * // Least key ≥ target
2209
+ * const mm = new TreeMultiMap<number, string>();
2210
+ * mm.add(10, 'a');
2211
+ * mm.add(20, 'b');
2212
+ * mm.add(30, 'c');
2213
+ * console.log(mm.ceiling(15)?.[0]); // 20;
2214
+ */
2215
+ ceiling(key: K): [K, V[]] | undefined;
2216
+ /**
2217
+ * Returns the entry with the largest key <= given key.
2218
+ * @remarks Time O(log n), Space O(1)
2219
+
2220
+
2221
+
2222
+
2223
+
2224
+
2225
+
2226
+
2227
+
2228
+
2229
+
2230
+
2231
+
2232
+
2233
+
2234
+
2235
+
2236
+
2237
+
2238
+
2239
+
2240
+
2241
+
2242
+
2243
+
2244
+
2245
+
2246
+
2247
+
2248
+
2249
+
2250
+
2251
+
2252
+
2253
+
2254
+
2255
+
2256
+
2257
+
2258
+
2259
+
2260
+
2261
+
2262
+
2263
+
2264
+
2265
+
2266
+
2267
+
2268
+
2269
+
2270
+
2271
+
2272
+
2273
+
2274
+
2275
+
2276
+
2277
+
2278
+
2279
+
2280
+
2281
+
2282
+
2283
+
2284
+
2285
+
2286
+
2287
+
2288
+
2289
+
2290
+
2291
+
2292
+
2293
+
2294
+
2295
+
2296
+
2297
+
2298
+
2299
+
2300
+
2301
+
2302
+
2303
+
2304
+
2305
+
2306
+
2307
+
2308
+
2309
+
2310
+
2311
+
2312
+
2313
+
2314
+
2315
+
2316
+
2317
+
2318
+
2319
+
2320
+
2321
+
2322
+
2323
+
2324
+
2325
+
2326
+
2327
+
2328
+
2329
+
2330
+
2331
+
2332
+
2333
+
2334
+
2335
+
2336
+
2337
+
2338
+
2339
+
2340
+
2341
+
2342
+
2343
+
2344
+
2345
+
2346
+
2347
+
2348
+
2349
+
2350
+
2351
+
2352
+
2353
+
2354
+
2355
+
2356
+
2357
+
2358
+
2359
+
2360
+
2361
+
2362
+
2363
+
2364
+
2365
+ * @example
2366
+ * // Greatest key ≤ target
2367
+ * const mm = new TreeMultiMap<number, string>();
2368
+ * mm.add(10, 'a');
2369
+ * mm.add(20, 'b');
2370
+ * mm.add(30, 'c');
2371
+ * console.log(mm.floor(25)?.[0]); // 20;
2372
+ */
2373
+ floor(key: K): [K, V[]] | undefined;
2374
+ /**
2375
+ * Returns the entry with the smallest key > given key.
2376
+ * @remarks Time O(log n), Space O(1)
2377
+
2378
+
2379
+
2380
+
2381
+
2382
+
2383
+
2384
+
2385
+
2386
+
2387
+
2388
+
2389
+
2390
+
2391
+
2392
+
2393
+
2394
+
2395
+
2396
+
2397
+
2398
+
2399
+
2400
+
2401
+
2402
+
2403
+
2404
+
2405
+
2406
+
2407
+
2408
+
2409
+
2410
+
2411
+
2412
+
2413
+
2414
+
2415
+
2416
+
2417
+
2418
+
2419
+
2420
+
2421
+
2422
+
2423
+
2424
+
2425
+
2426
+
2427
+
2428
+
2429
+
2430
+
2431
+
2432
+
2433
+
2434
+
2435
+
2436
+
2437
+
2438
+
2439
+
2440
+
2441
+
2442
+
2443
+
2444
+
2445
+
2446
+
2447
+
2448
+
2449
+
2450
+
2451
+
2452
+
2453
+
2454
+
2455
+
2456
+
2457
+
2458
+
2459
+
2460
+
2461
+
2462
+
2463
+
2464
+
2465
+
2466
+
2467
+
2468
+
2469
+
2470
+
2471
+
2472
+
2473
+
2474
+
2475
+
2476
+
2477
+
2478
+
2479
+
2480
+
2481
+
2482
+
2483
+
2484
+
2485
+
2486
+
2487
+
2488
+
2489
+
2490
+
2491
+ * @example
2492
+ * // Least key > target
2493
+ * const mm = new TreeMultiMap<number, string>();
2494
+ * mm.add(10, 'a');
2495
+ * mm.add(20, 'b');
2496
+ * console.log(mm.higher(10)?.[0]); // 20;
2497
+ */
2498
+ higher(key: K): [K, V[]] | undefined;
2499
+ /**
2500
+ * Returns the entry with the largest key < given key.
2501
+ * @remarks Time O(log n), Space O(1)
2502
+
2503
+
2504
+
2505
+
2506
+
2507
+
2508
+
2509
+
2510
+
2511
+
2512
+
2513
+
2514
+
2515
+
2516
+
2517
+
2518
+
2519
+
2520
+
2521
+
2522
+
2523
+
2524
+
2525
+
2526
+
2527
+
2528
+
2529
+
2530
+
2531
+
2532
+
2533
+
2534
+
2535
+
2536
+
2537
+
2538
+
2539
+
2540
+
2541
+
2542
+
2543
+
2544
+
2545
+
2546
+
2547
+
2548
+
2549
+
2550
+
2551
+
2552
+
2553
+
2554
+
2555
+
2556
+
2557
+
2558
+
2559
+
2560
+
2561
+
2562
+
2563
+
2564
+
2565
+
2566
+
2567
+
2568
+
2569
+
2570
+
2571
+
2572
+
2573
+
2574
+
2575
+
2576
+
2577
+
2578
+
2579
+
2580
+
2581
+
2582
+
2583
+
2584
+
2585
+
2586
+
2587
+
2588
+
2589
+
2590
+
2591
+
2592
+
2593
+
2594
+
2595
+
2596
+
2597
+
2598
+
2599
+
2600
+
2601
+
2602
+
2603
+
2604
+
2605
+
2606
+
2607
+
2608
+
2609
+
2610
+
2611
+
2612
+
2613
+
2614
+
2615
+
2616
+ * @example
2617
+ * // Greatest key < target
2618
+ * const mm = new TreeMultiMap<number, string>();
2619
+ * mm.add(10, 'a');
2620
+ * mm.add(20, 'b');
2621
+ * console.log(mm.lower(20)?.[0]); // 10;
2622
+ */
2623
+ lower(key: K): [K, V[]] | undefined;
2624
+ /**
2625
+ * Prints the internal tree structure (for debugging).
2626
+ * @remarks Time O(n), Space O(n)
2627
+
2628
+
2629
+
2630
+
2631
+
2632
+
2633
+
2634
+
2635
+
2636
+
2637
+
2638
+
2639
+
2640
+
2641
+
2642
+
2643
+
2644
+
2645
+
2646
+
2647
+
2648
+
2649
+
2650
+
2651
+
2652
+
2653
+
2654
+
2655
+
2656
+
2657
+
2658
+
2659
+
2660
+
2661
+
2662
+
2663
+
2664
+
2665
+
2666
+
2667
+
2668
+
2669
+
2670
+
2671
+
2672
+
2673
+
2674
+
2675
+
2676
+
2677
+
2678
+
2679
+
2680
+
2681
+
2682
+
2683
+
2684
+
2685
+
2686
+
2687
+
2688
+
2689
+
2690
+
2691
+
2692
+
2693
+
2694
+
2695
+
2696
+
2697
+
2698
+
2699
+
2700
+
2701
+
2702
+
2703
+
2704
+
2705
+
2706
+
2707
+
2708
+
2709
+
2710
+
2711
+
2712
+
2713
+
2714
+
2715
+
2716
+
2717
+
2718
+
2719
+
2720
+
2721
+
2722
+
2723
+
2724
+
2725
+
2726
+
2727
+
2728
+
2729
+
2730
+
2731
+
2732
+
2733
+
2734
+
2735
+
2736
+
2737
+
2738
+
2739
+
2740
+
2741
+
2742
+
2743
+
2744
+
2745
+
2746
+
2747
+
2748
+
2749
+
2750
+
2751
+
2752
+
2753
+
2754
+
2755
+
2756
+
2757
+
2758
+
2759
+
2760
+
2761
+
2762
+
2763
+
2764
+
2765
+
2766
+
2767
+
2768
+
2769
+
2770
+ * @example
2771
+ * // Display tree
2772
+ * const mm = new TreeMultiMap<number, string>();
2773
+ * mm.add(1, 'a');
2774
+ * expect(() => mm.print()).not.toThrow();
2775
+ */
2776
+ print(): void;
2777
+ /**
2778
+ * Executes a callback for each entry.
2779
+ * @remarks Time O(n), Space O(1)
2780
+
2781
+
2782
+
2783
+
2784
+
2785
+
2786
+
2787
+
2788
+
2789
+
2790
+
2791
+
2792
+
2793
+
2794
+
2795
+
2796
+
2797
+
2798
+
2799
+
2800
+
2801
+
2802
+
2803
+
2804
+
2805
+
2806
+
2807
+
2808
+
2809
+
2810
+
2811
+
2812
+
2813
+
2814
+
2815
+
2816
+
2817
+
2818
+
2819
+
2820
+
2821
+
2822
+
2823
+
2824
+
2825
+
2826
+
2827
+
2828
+
2829
+
2830
+
2831
+
2832
+
2833
+
2834
+
2835
+
2836
+
2837
+
2838
+
2839
+
2840
+
2841
+
2842
+
2843
+
2844
+
2845
+
2846
+
2847
+
2848
+
2849
+
2850
+
2851
+
2852
+
2853
+
2854
+
2855
+
2856
+
2857
+
2858
+
2859
+
2860
+
2861
+
2862
+
2863
+
2864
+
2865
+
2866
+
2867
+
2868
+
2869
+
2870
+
176
2871
 
177
2872
 
178
2873
 
@@ -226,16 +2921,27 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
226
2921
 
227
2922
 
228
2923
  * @example
229
- * // Check key existence
2924
+ * // Iterate entries
230
2925
  * const mm = new TreeMultiMap<number, string>();
231
2926
  * mm.add(1, 'a');
232
- * console.log(mm.has(1)); // true;
233
- * console.log(mm.has(2)); // false;
2927
+ * mm.add(2, 'b');
2928
+ * const keys: number[] = [];
2929
+ * mm.forEach((v, k) => keys.push(k));
2930
+ * console.log(keys); // [1, 2];
234
2931
  */
235
- has(key: K): boolean;
2932
+ forEach(callback: (value: V[], key: K, map: this) => void): void;
236
2933
  /**
237
- * Live bucket reference (do not auto-delete key if bucket becomes empty via mutation).
238
- * @remarks Time O(log n), Space O(1)
2934
+ * Creates a new map with entries that pass the predicate.
2935
+ * @remarks Time O(n), Space O(n)
2936
+
2937
+
2938
+
2939
+
2940
+
2941
+
2942
+
2943
+
2944
+
239
2945
 
240
2946
 
241
2947
 
@@ -288,17 +2994,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
288
2994
 
289
2995
 
290
2996
 
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
2997
 
303
2998
 
304
2999
 
@@ -331,18 +3026,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
331
3026
 
332
3027
 
333
3028
 
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
3029
 
347
3030
 
348
3031
 
@@ -394,17 +3077,65 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
394
3077
 
395
3078
 
396
3079
  * @example
397
- * // Set values for key
3080
+ * // Filter entries
398
3081
  * const mm = new TreeMultiMap<number, string>();
399
- * mm.set(1, 'a');
400
- * mm.set(1, 'b');
401
- * console.log(mm.get(1)); // ['a', 'b'];
3082
+ * mm.add(1, 'a');
3083
+ * mm.add(2, 'b');
3084
+ * mm.add(3, 'c');
3085
+ * const filtered = mm.filter((v, k) => k > 1);
3086
+ * console.log([...filtered.keys()]); // [2, 3];
402
3087
  */
403
- set(entry: [K | null | undefined, V[] | undefined] | K | null | undefined, value?: V): boolean;
404
- set(key: K, value: V): boolean;
3088
+ filter(predicate: (value: V[], key: K, map: this) => boolean): TreeMultiMap<K, V, R>;
405
3089
  /**
406
- * Deletes a key and its entire bucket.
407
- * @remarks Time O(log n), Space O(1)
3090
+ * Creates a new map by transforming each entry.
3091
+ * @remarks Time O(n log n), Space O(n)
3092
+
3093
+
3094
+
3095
+
3096
+
3097
+
3098
+
3099
+
3100
+
3101
+
3102
+
3103
+
3104
+
3105
+
3106
+
3107
+
3108
+
3109
+
3110
+
3111
+
3112
+
3113
+
3114
+
3115
+
3116
+
3117
+
3118
+
3119
+
3120
+
3121
+
3122
+
3123
+
3124
+
3125
+
3126
+
3127
+
3128
+
3129
+
3130
+
3131
+
3132
+
3133
+
3134
+
3135
+
3136
+
3137
+
3138
+
408
3139
 
409
3140
 
410
3141
 
@@ -457,65 +3188,12 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
457
3188
 
458
3189
 
459
3190
 
460
- * @example
461
- * // Remove key
462
- * const mm = new TreeMultiMap<number, string>();
463
- * mm.add(1, 'a');
464
- * mm.add(2, 'b');
465
- * mm.delete(1);
466
- * console.log(mm.has(1)); // false;
467
- */
468
- delete(key: K): boolean;
469
- /**
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
472
3191
 
473
3192
 
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
3193
 
486
3194
 
487
- * @example
488
- * // Delete specific value
489
- * const mm = new TreeMultiMap<number, string>();
490
- * mm.add(1, 'a');
491
- * mm.add(1, 'b');
492
- * mm.deleteValue(1, 'a');
493
- * console.log(mm.get(1)); // ['b'];
494
- */
495
- deleteValue(key: K, value: V, eq?: (a: V, b: V) => boolean): boolean;
496
- /**
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
499
3195
 
500
3196
 
501
- * @example
502
- * // Delete all matching values
503
- * const mm = new TreeMultiMap<number, string>();
504
- * mm.add(1, 'a');
505
- * mm.add(1, 'a');
506
- * 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)
514
- */
515
- [Symbol.iterator](): Iterator<[K, V[]]>;
516
- /**
517
- * Iterates over all keys.
518
- * @remarks Time O(n), Space O(1)
519
3197
 
520
3198
 
521
3199
 
@@ -555,15 +3233,15 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
555
3233
 
556
3234
 
557
3235
  * @example
558
- * // Iterate keys
3236
+ * // Transform values
559
3237
  * const mm = new TreeMultiMap<number, string>();
560
- * mm.add(3, 'c');
561
3238
  * mm.add(1, 'a');
562
- * console.log([...mm.keys()]); // [1, 3];
3239
+ * const mapped = mm.map((v, k) => [k, v.map(s => s.toUpperCase())] as [number, string[]]);
3240
+ * console.log(mapped.get(1)); // ['A'];
563
3241
  */
564
- keys(): IterableIterator<K>;
3242
+ map<V2>(mapper: (value: V[], key: K, map: this) => [K, V2[]]): TreeMultiMap<K, V2, R>;
565
3243
  /**
566
- * Iterates over all buckets.
3244
+ * Reduces all entries to a single value.
567
3245
  * @remarks Time O(n), Space O(1)
568
3246
 
569
3247
 
@@ -603,58 +3281,12 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
603
3281
 
604
3282
 
605
3283
 
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
3284
 
618
3285
 
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
3286
 
631
3287
 
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
3288
 
644
3289
 
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
3290
 
659
3291
 
660
3292
 
@@ -668,18 +3300,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
668
3300
 
669
3301
 
670
3302
 
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
3303
 
684
3304
 
685
3305
 
@@ -693,49 +3313,39 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
693
3313
 
694
3314
 
695
3315
 
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
3316
 
709
3317
 
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
3318
 
725
3319
 
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
-
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
+
739
3349
 
740
3350
 
741
3351
 
@@ -777,19 +3387,17 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
777
3387
 
778
3388
 
779
3389
  * @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;
3390
+ * // Aggregate
3391
+ * const mm = new TreeMultiMap<number, number>();
3392
+ * mm.add(1, 10);
3393
+ * mm.add(2, 20);
3394
+ * const sum = mm.reduce((acc, v) => acc + v.reduce((a, b) => a + b, 0), 0);
3395
+ * console.log(sum); // 30;
786
3396
  */
787
- ceiling(key: K): [K, V[]] | undefined;
3397
+ reduce<U>(callback: (accumulator: U, value: V[], key: K, map: this) => U, initialValue: U): U;
788
3398
  /**
789
- * Returns the entry with the largest key <= given key.
790
- * @remarks Time O(log n), Space O(1)
791
-
792
-
3399
+ * Sets multiple entries at once.
3400
+ * @remarks Time O(m log n), Space O(m) where m is input size
793
3401
 
794
3402
 
795
3403
 
@@ -829,19 +3437,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
829
3437
 
830
3438
 
831
3439
 
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
3440
 
846
3441
 
847
3442
 
@@ -871,18 +3466,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
871
3466
 
872
3467
 
873
3468
 
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
3469
 
887
3470
 
888
3471
 
@@ -912,17 +3495,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
912
3495
 
913
3496
 
914
3497
 
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
3498
 
927
3499
 
928
3500
 
@@ -962,15 +3534,15 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
962
3534
 
963
3535
 
964
3536
  * @example
965
- * // Display tree
3537
+ * // Set multiple entries
966
3538
  * const mm = new TreeMultiMap<number, string>();
967
- * mm.add(1, 'a');
968
- * expect(() => mm.print()).not.toThrow();
3539
+ * mm.setMany([[1, ['a']], [2, ['b']]]);
3540
+ * console.log(mm.size); // 2;
969
3541
  */
970
- print(): void;
3542
+ setMany(keysNodesEntriesOrRaws: Iterable<K | [K | null | undefined, V[] | undefined]>): boolean[];
971
3543
  /**
972
- * Executes a callback for each entry.
973
- * @remarks Time O(n), Space O(1)
3544
+ * Searches for entries within a key range.
3545
+ * @remarks Time O(log n + k), Space O(k) where k is result size
974
3546
 
975
3547
 
976
3548
 
@@ -1009,19 +3581,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1009
3581
 
1010
3582
 
1011
3583
 
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
3584
 
1026
3585
 
1027
3586
 
@@ -1060,19 +3619,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1060
3619
 
1061
3620
 
1062
3621
 
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
3622
 
1077
3623
 
1078
3624
 
@@ -1112,16 +3658,25 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1112
3658
 
1113
3659
 
1114
3660
  * @example
1115
- * // Transform values
3661
+ * // Find keys in range
1116
3662
  * 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'];
3663
+ * mm.add(10, 'a');
3664
+ * mm.add(20, 'b');
3665
+ * mm.add(30, 'c');
3666
+ * const result = mm.rangeSearch([15, 25]);
3667
+ * console.log(result.length); // 1;
1120
3668
  */
1121
- map<V2>(mapper: (value: V[], key: K, map: this) => [K, V2[]]): TreeMultiMap<K, V2, R>;
3669
+ rangeSearch<C extends (node: RedBlackTreeNode<K, V[]>) => unknown>(range: Range<K> | [K, K], callback?: C): ReturnType<C>[];
1122
3670
  /**
1123
- * Reduces all entries to a single value.
1124
- * @remarks Time O(n), Space O(1)
3671
+ * Creates a shallow clone of this map.
3672
+ * @remarks Time O(n log n), Space O(n)
3673
+
3674
+
3675
+
3676
+
3677
+
3678
+
3679
+
1125
3680
 
1126
3681
 
1127
3682
 
@@ -1160,18 +3715,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1160
3715
 
1161
3716
 
1162
3717
 
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
3718
 
1176
3719
 
1177
3720
 
@@ -1202,16 +3745,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1202
3745
 
1203
3746
 
1204
3747
 
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
3748
 
1216
3749
 
1217
3750
 
@@ -1242,19 +3775,6 @@ export declare class TreeMultiMap<K = any, V = any, R = any> implements Iterable
1242
3775
 
1243
3776
 
1244
3777
 
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
3778
 
1259
3779
 
1260
3780