665:) time complexity. In addition, and like all binary search trees, self-balancing binary search trees keep their elements in order. Thus, traversing its elements follows a least-to-greatest pattern, whereas traversing a hash table can result in elements being in seemingly random order. Because they are in order, tree-based maps can also satisfy range queries (find all values between two bounds) whereas a hashmap can only find exact values. However, hash tables have a much better average-case time complexity than self-balancing binary search trees of O(1), and their worst-case performance is highly unlikely when a good
709:, though the relative performance of these implementations varies. For instance, Judy trees have been found to perform less efficiently than hash tables, while carefully selected hash tables generally perform more efficiently than adaptive radix trees, with potentially greater restrictions on the data types they can handle. The advantages of these alternative structures come from their ability to handle additional associative array operations, such as finding the mapping whose key is the closest to a queried key when the query is absent in the set of mappings.
555:
1189:, which produces a text or binary representation of the original objects that can be written directly to a file. This is most commonly implemented in the underlying object model, like .Net or Cocoa, which includes standard functions that convert the internal data into text. The program can create a complete text representation of any group of objects by calling these methods, which are almost always already implemented in the base associative array class.
1228:
393:
Suppose that the set of loans made by a library is represented in a data structure. Each book in a library may be checked out by one patron at a time. However, a single patron may be able to check out multiple books. Therefore, the information about which books are checked out to which patrons may be
617:
ratio than separate chaining when the table is mostly empty. However, as the table becomes filled with more elements, open addressing's performance degrades exponentially. Additionally, separate chaining uses less memory in most cases, unless the entries are very small (less than four times the size
586:
that separates each key into a separate "bucket" of the array. The basic idea behind a hash table is that accessing an element of an array via its index is a simple, constant-time operation. Therefore, the average overhead of an operation for a hash table is only the computation of the key's hash,
948:
Associative arrays can be implemented in any programming language as a package and many language systems provide them as part of their standard library. In some languages, they are not only built into the standard system, but have special syntax, often using array-like subscripting.
1215:
and more closely matching the internal structure of the programs using them led to a renaissance in the key–value store market. These systems can store and retrieve associative arrays in a native fashion, which can greatly improve performance in common web-related workflows.
528:
that indicates the lack of a mapping. This technique is simple and fast, with each dictionary operation taking constant time. However, the space requirement for this structure is the size of the entire keyspace, making it impractical unless the keyspace is small.
610:, that stores all the values matching the hash. By contrast, in open addressing, if a hash collision is found, the table seeks an empty spot in an array to store the value in a deterministic manner, usually by looking at the next immediate position in the array.
1196:(DB) is required. Some DB systems natively store associative arrays by serializing the data and then storing that serialized data and the key. Individual arrays can then be loaded or saved from the database using the key to refer to them. These
326:
is a related abstract data type in which the mappings operate in both directions: each value must be associated with a unique key, and a second lookup operation takes a value as an argument and looks up the key associated with that value.
448:
A lookup operation on the key "Great
Expectations" would return "John". If John returns his book, that would cause a deletion operation, and if Pat checks out a book, that would cause an insertion operation, leading to a different state:
677:). However, this introduces extra complexity into the implementation and may cause even worse performance for smaller hash tables, where the time spent inserting into and balancing the tree is greater than the time needed to perform a
508:
of mappings. With this implementation, the time to perform the basic dictionary operations is linear in the total number of mappings. However, it is easy to implement and the constant factors in its running time are small.
1204:(RDBs), but a lack of standardization, among other reasons, limited their use to certain niche roles. RDBs were used for these roles in most cases, although saving objects to a RDB can be complicated, a problem known as
652:
Compared to hash tables, these structures have both strengths and weaknesses. The worst-case performance of self-balancing binary search trees is significantly better than that of a hash table, with a time complexity in
1149:), all objects behave as associative arrays with string-valued keys, while the Map and WeakMap types take arbitrary objects as keys. In Lua, they are used as the primitive building block for all data structures. In
898:
The basic definition of a dictionary does not mandate an order. To guarantee a fixed order of enumeration, ordered versions of the associative array are often used. There are two senses of an ordered dictionary:
1467:
672:
A self-balancing binary search tree can be used to implement the buckets for a hash table that uses separate chaining. This allows for average-case constant lookup, but assures a worst-case performance of O(log
1587:. Quote: "The Standard Template library ... some of its containers -- the set<T>, map<T1, T2>, multiset<T>, and multimap<T1, T2> templates -- are generally built using a special kind of
303:
find the value (if any) that is bound to a given key. The argument to this operation is the key, and the value is returned from the operation. If no value is found, some lookup functions raise an
943:
1818:
587:
combined with accessing the corresponding bucket within the array. As such, hash tables usually perform in O(1) time, and usually outperform alternative implementations.
295:
239:
1464:
903:
The order of enumeration is always deterministic for a given set of keys by sorting. This is the case for tree-based implementations, one representative being the
512:
Another very simple implementation technique, usable when the keys are restricted to a narrow range, is direct addressing into an array: the value for a given key
2185:
241:
pair to the collection, mapping the key to its new value. Any existing mapping is overwritten. The arguments to this operation are the key and the value.
2352:
1861:
1717:
2723:
2357:
1016:, support associative arrays as a primary container type. In many more languages, they are available as library functions without special syntax.
594:: the mapping by the hash function of two different keys to the same bucket of the array. The two most widespread approaches to this problem are
2347:
2342:
1387:
2155:
1675:
1316:
1283:
910:
The order of enumeration is key-independent and is instead based on the order of insertion. This is the case for the "ordered dictionary" in
2330:
2231:
1205:
934:
on top of a normal dictionary, or by moving the actual data out of the sparse (unordered) array and into a dense insertion-ordered one.
1374:
2094:
1621:
1445:
778:
638:
315:
to loop over all the mappings. For such operations, the order in which the mappings are returned is usually implementation-defined.
1658:
Alvarez, Victor; Richter, Stefan; Chen, Xiao; Dittrich, Jens (April 2015). "A comparison of adaptive radix trees and hash tables".
661:). This is in contrast to hash tables, whose worst-case performance involves all elements sharing a single bucket, resulting in O(
2481:
1884:
83:
2598:
2403:
2335:
2297:
1889:
1100:
1076:
603:
38:
1781:
1735:
2784:
1854:
1048:
1044:
1032:
997:
919:
395:
394:
represented by an associative array, in which the books are the keys and the patrons are the values. Using notation from
2774:
2498:
2428:
2276:
1092:
1040:
51:"Associative table" redirects here. For the relation used in database systems to resolve many-to-many relationship, see
90:, such that each possible key appears at most once in the collection. In mathematical terms, an associative array is a
2779:
2753:
1968:
1951:
1233:
1080:
1060:
1001:
915:
45:
181:
is often known as a "mapping"; the same word may also be used to refer to the process of creating a new association.
2508:
2376:
2167:
1934:
1929:
1428:
1193:
1145:, all arrays can be associative, except that the keys are limited to integers and strings. In JavaScript (see also
1013:
311:
Associative arrays may also include other operations such as determining the number of mappings or constructing an
140:
1117:
2686:
2638:
2550:
2528:
2523:
2451:
2317:
1924:
1084:
1009:
856:
178:
165:
known in mathematics. Rather, it arises from the association of values with keys. It is not to be confused with
87:
2560:
2224:
1963:
1958:
1917:
1847:
1749:
1158:
968:
supported them as one possible implementation of sets and maps. Most modern scripting languages, starting with
562:
misses required to look up elements in large hash tables (far exceeding size of the cache) with chaining and
2713:
2628:
2198:
2175:
1463:
Dietzfelbinger, M., Karlin, A., Mehlhorn, K., Meyer auf der Heide, F., Rohnert, H., and Tarjan, R. E. 1994.
147:
1197:
1192:
For programs that use very large data sets, this sort of individual file storage is not appropriate, and a
2456:
2312:
2271:
2266:
2180:
1980:
1584:
1246:
307:, while others return a default value (such as zero, null, or a specific value passed to the constructor).
297:
pair from the collection, unmapping a given key from its value. The argument to this operation is the key.
91:
2446:
2421:
2106:
2061:
2023:
1175:
Many programs using associative arrays will need to store that data in a more permanent form, such as a
1112:
567:
554:
2248:
2046:
1415:
579:
162:
121:
98:
1378:
1170:
2789:
2718:
2696:
2623:
2476:
2468:
2388:
2217:
1638:
1341:
1201:
322:
generalizes an associative array by allowing multiple values to be associated with a single key. A
166:
132:
2089:
1565:
646:
2701:
2681:
2633:
2608:
2393:
2362:
2074:
1939:
1899:
1681:
1126:
931:
817:
706:
690:
304:
250:
194:
125:
79:
52:
1561:
500:
For dictionaries with very few mappings, it may make sense to implement the dictionary using an
2588:
2518:
2307:
2302:
2008:
1671:
1617:
1441:
1312:
1279:
595:
323:
155:
2733:
2618:
2416:
2031:
1663:
1478:
1411:
1345:
1304:
1271:
1134:
1005:
993:
927:
861:
607:
501:
136:
59:
2738:
2603:
2555:
2488:
2051:
1993:
1471:
1212:
964:
made multi-dimensional associative arrays, optionally persistent, its key data structure.
599:
574:
The most frequently used general-purpose implementation of an associative array is with a
31:
1547:
112:
that implement associative arrays. The two major solutions to the dictionary problem are
1767:
355:
remove(k, insert(j, v, D)) = if k == j then remove(k, D) else insert(j, v, remove(k, D))
2691:
2513:
2503:
2411:
2143:
2121:
1946:
1870:
1423:
1303:. Lecture Notes in Computer Science. Vol. 401. Springer Verlag. pp. 106–114.
1028:
957:
911:
654:
591:
563:
525:
109:
2768:
2613:
2116:
2013:
1998:
1370:
1185:
1176:
1150:
678:
666:
583:
1834:
1685:
1510:
1200:
have been used for many years and have a history as long as that of the more common
2570:
2545:
1605:
1699:
1108:
926:
The latter is more common. Such ordered dictionaries can be implemented using an
2748:
2743:
2593:
2540:
2367:
2111:
2036:
1437:
1227:
1122:
1024:
627:
537:
505:
151:
117:
1475:
1211:
After approximately 2010, the need for high-performance databases suitable for
602:. In separate chaining, the array does not store the value itself but stores a
2653:
2648:
2565:
2533:
2438:
2381:
2099:
2003:
1667:
1482:
1419:
1223:
989:
748:
702:
694:
614:
575:
549:
533:
120:. It is sometimes also possible to solve the problem using directly addressed
113:
1308:
1275:
17:
2728:
2706:
2663:
2658:
2325:
2281:
2240:
2041:
1988:
1433:
1036:
1020:
952:
Built-in syntactic support for associative arrays was introduced in 1969 by
559:
44:"Map (computer science)" redirects here. For the higher-order function, see
335:
The operations of the associative array should satisfy various properties:
2138:
37:"Associative container" redirects here. For their C++ implementation, see
2643:
2084:
1912:
642:
319:
312:
1782:"System.Generics.Collections.TDictionary - RAD Studio API Documentation"
2133:
2079:
1088:
693:
or in data structures specialized to a particular type of keys such as
1835:
NIST's
Dictionary of Algorithms and Data Structures: Associative Array
1270:. Lecture Notes in Computer Science. Vol. 971. pp. 122–137.
1179:. A common solution to this problem is a generalized concept known as
570:, though as the table gets full, its performance degrades drastically.
184:
The operations that are usually defined for an associative array are:
30:"Dictionary (data structure)" redirects here. Not to be confused with
2128:
2069:
953:
146:
Associative arrays have many applications including such fundamental
1299:
Andersson, Arne (1989). "Optimal Bounds on the
Dictionary Problem".
637:
Another common approach is to implement an associative array with a
1072:
143:
is a form of direct hardware-level support for associative arrays.
1839:
1750:"collections — Container datatypes — Python 3.9.0a3 documentation"
1241:
1096:
1064:
961:
553:
1805:
1266:
Collins, Graham; Syme, Donald (1995). "A theory of finite maps".
2261:
2150:
1548:"When should I use a hash table instead of an association list?"
1146:
1056:
977:
973:
965:
698:
399:
2213:
1843:
340:
lookup(k, insert(j, v, D)) = if k == j then v else lookup(k, D)
2256:
1142:
985:
981:
969:
2209:
532:
The two major approaches for implementing dictionaries are a
681:
on all elements of a linked list or similar data structure.
101:. It supports 'lookup', 'remove', and 'insert' operations.
1660:
1718:"OrderedDictionary Class (System.Collections.Specialized)"
131:
Many programming languages include associative arrays as
1268:
Higher Order Logic
Theorem Proving and Its Applications
944:
Comparison of programming languages (associative array)
253:
197:
960:
offered tables with string keys and integer values.
689:
Associative arrays may also be stored in unbalanced
2672:
2581:
2467:
2437:
2402:
2290:
2247:
2166:
2060:
2022:
1979:
1898:
1877:
1133:(since both typically use this implementation); in
904:
1616:(2nd ed.). Addison-Wesley. pp. 513–558.
289:
233:
1465:"Dynamic Perfect Hashing: Upper and Lower Bounds"
1380:Algorithms and Data Structures: The Basic Toolbox
177:In an associative array, the association between
1806:"Associative Arrays, the D programming language"
1662:. Seoul, South Korea: IEEE. pp. 1227–1238.
1534:
1509:Black, Paul E.; Stewart, Rob (2 November 2020).
1493:
1459:
1457:
1377:(2008), "4 Hash Tables and Associative Arrays",
1819:"Archives and Serializations Programming Guide"
566:. Linear probing performs better due to better
27:Data structure that associates keys with values
1474:. SIAM J. Comput. 23, 4 (Aug. 1994), 738-761.
108:is the classic problem of designing efficient
2225:
1855:
8:
1568:(2006), "Pathfinders for associative maps",
1515:Dictionary of Algorithms and Data Structures
1476:http://portal.acm.org/citation.cfm?id=182370
2232:
2218:
2210:
1862:
1848:
1840:
1348:(2006), "9.1 The Map Abstract Data Type",
558:This graph compares the average number of
252:
196:
1350:Data Structures & Algorithms in Java
716:
385:creates a new, empty associative array.
128:, or other more specialized structures.
1504:
1502:
1352:(4th ed.), Wiley, pp. 368–371
1258:
1768:"Dictionary<TKey, TValue> Class"
1406:
1404:
1402:
1400:
1301:Proc. Symposium on Optimal Algorithms
135:, while many other languages provide
7:
1365:
1363:
1361:
1359:
1336:
1334:
1332:
1330:
1328:
1206:object-relational impedance mismatch
590:Hash tables must be able to handle
1161:also supports associative arrays.
633:Self-balancing binary search trees
469:"The Brothers Karamazov"
25:
1589:self-balancing binary search tree
779:Self-balancing binary search tree
639:self-balancing binary search tree
606:to another container, usually an
139:that support associative arrays.
1226:
520:, or if there is no mapping for
351:is an exception or default value
161:The name does not come from the
1610:The Art of Computer Programming
1393:from the original on 2014-08-02
524:then the cell stores a special
457:"Pride and Prejudice"
410:"Pride and Prejudice"
402:, the data structure would be:
1535:Goodrich & Tamassia (2006)
1494:Goodrich & Tamassia (2006)
434:"Great Expectations"
284:
254:
228:
198:
1:
2298:Arbitrary-precision or bignum
1583:Joel Adams and Larry Nyhoff.
1550:. lisp-faq/part2. 1996-02-20.
481:"Wuthering Heights"
422:"Wuthering Heights"
381:is an associative array, and
1386:, Springer, pp. 81–98,
613:Open addressing has a lower
516:is stored at the array cell
39:associative containers (C++)
2186:Directed acyclic word graph
1952:Double-ended priority queue
1637:Probst, Mark (2010-04-30).
1234:Computer programming portal
290:{\displaystyle (key,value)}
234:{\displaystyle (key,value)}
46:Map (higher-order function)
2806:
1429:Introduction to Algorithms
1426:(2001), "11 Hash Tables",
1194:database management system
1168:
956:, under the name "table".
941:
720:Underlying data structure
625:
547:
544:Hash table implementations
141:Content-addressable memory
50:
43:
36:
29:
2639:Strongly typed identifier
2194:
1668:10.1109/ICDE.2015.7113370
1639:"Linear vs Binary Search"
1570:Ext. Abstracts GIS-l 2006
1483:10.1137/S0097539791194094
1137:and Lua, they are called
728:
725:
722:
719:
1918:Retrieval Data Structure
1309:10.1007/3-540-51859-2_10
1276:10.1007/3-540-60275-5_61
855:Sequential container of
451:
404:
360:remove(k, new()) = new()
2714:Parametric polymorphism
2199:List of data structures
2176:Binary decision diagram
1786:docwiki.embarcadero.com
1572:, GIS-I, pp. 71–74
914:, the LinkedHashMap of
345:lookup(k, new()) = fail
2181:Directed acyclic graph
1247:Function (mathematics)
571:
291:
235:
167:associative processors
1614:Sorting and Searching
1416:Leiserson, Charles E.
568:locality of reference
557:
292:
236:
2785:Composite data types
2047:Unrolled linked list
1440:, pp. 221–252,
1342:Goodrich, Michael T.
622:Tree implementations
300:Lookup, find, or get
251:
195:
163:associative property
148:programming patterns
133:primitive data types
2775:Abstract data types
2719:Primitive data type
2624:Recursive data type
2477:Algebraic data type
2353:Quadruple precision
2095:Self-balancing tree
1704:en.cppreference.com
1202:relational database
1113:unordered_map (C++)
707:van Emde Boas trees
691:binary search trees
126:binary search trees
2780:Associative arrays
2682:Abstract data type
2363:Extended precision
2322:Reduced precision
2075:Binary search tree
1940:Double-ended queue
1821:, Apple Inc., 2012
1470:2016-03-04 at the
1153:, they are called
1129:, they are called
1127:Windows PowerShell
932:doubly linked list
930:, by overlaying a
894:Ordered dictionary
818:binary search tree
723:Lookup or Removal
572:
287:
231:
137:software libraries
106:dictionary problem
88:(key, value) pairs
80:abstract data type
53:Associative entity
2762:
2761:
2494:Associative array
2358:Octuple precision
2207:
2206:
2009:Hashed array tree
1908:Associative array
1677:978-1-4799-7964-6
1420:Rivest, Ronald L.
1412:Cormen, Thomas H.
1346:Tamassia, Roberto
1318:978-3-540-51859-4
1285:978-3-540-60275-0
1165:Permanent storage
907:container of C++.
891:
890:
596:separate chaining
487:"Alice"
463:"Alice"
428:"Alice"
416:"Alice"
324:bidirectional map
179:a key and a value
156:decorator pattern
64:associative array
16:(Redirected from
2797:
2734:Type constructor
2619:Opaque data type
2551:Record or Struct
2348:Double precision
2343:Single precision
2234:
2227:
2220:
2211:
2032:Association list
1864:
1857:
1850:
1841:
1822:
1816:
1810:
1809:
1802:
1796:
1795:
1793:
1792:
1778:
1772:
1771:
1764:
1758:
1757:
1746:
1740:
1739:
1732:
1726:
1725:
1714:
1708:
1707:
1696:
1690:
1689:
1655:
1649:
1648:
1646:
1645:
1634:
1628:
1627:
1602:
1596:
1581:
1575:
1573:
1558:
1552:
1551:
1544:
1538:
1532:
1526:
1525:
1523:
1521:
1506:
1497:
1491:
1485:
1461:
1452:
1450:
1432:(2nd ed.),
1408:
1395:
1394:
1392:
1385:
1367:
1354:
1353:
1338:
1323:
1322:
1296:
1290:
1289:
1263:
1236:
1231:
1230:
1198:key–value stores
1120:
1103:they are called
1067:they are called
1051:they are called
1006:Wolfram Language
938:Language support
928:association list
906:
862:association list
717:
608:association list
582:combined with a
502:association list
491:
488:
485:
482:
479:
476:
473:
470:
467:
464:
461:
458:
455:
444:
441:
440:"John"
438:
435:
432:
429:
426:
423:
420:
417:
414:
411:
408:
384:
380:
376:
372:
368:
361:
356:
350:
346:
341:
296:
294:
293:
288:
244:Remove or delete
240:
238:
237:
232:
60:computer science
21:
2805:
2804:
2800:
2799:
2798:
2796:
2795:
2794:
2765:
2764:
2763:
2758:
2739:Type conversion
2674:
2668:
2604:Enumerated type
2577:
2463:
2457:null-terminated
2433:
2398:
2286:
2243:
2238:
2208:
2203:
2190:
2162:
2056:
2052:XOR linked list
2018:
1994:Circular buffer
1975:
1894:
1873:
1871:Data structures
1868:
1831:
1826:
1825:
1817:
1813:
1808:. Digital Mars.
1804:
1803:
1799:
1790:
1788:
1780:
1779:
1775:
1766:
1765:
1761:
1754:docs.python.org
1748:
1747:
1743:
1736:"LinkedHashMap"
1734:
1733:
1729:
1716:
1715:
1711:
1698:
1697:
1693:
1678:
1657:
1656:
1652:
1643:
1641:
1636:
1635:
1631:
1624:
1612:. Vol. 3:
1604:
1603:
1599:
1582:
1578:
1560:
1559:
1555:
1546:
1545:
1541:
1533:
1529:
1519:
1517:
1508:
1507:
1500:
1492:
1488:
1472:Wayback Machine
1462:
1455:
1448:
1424:Stein, Clifford
1410:
1409:
1398:
1390:
1383:
1369:
1368:
1357:
1340:
1339:
1326:
1319:
1298:
1297:
1293:
1286:
1265:
1264:
1260:
1255:
1232:
1225:
1222:
1213:cloud computing
1173:
1171:Key–value store
1167:
1116:
946:
940:
896:
859:
857:key–value pairs
715:
687:
635:
630:
624:
618:of a pointer).
600:open addressing
552:
546:
498:
493:
492:
489:
486:
483:
480:
477:
475:"Pat"
474:
471:
468:
465:
462:
459:
456:
453:
446:
445:
442:
439:
436:
433:
430:
427:
424:
421:
418:
415:
412:
409:
406:
391:
382:
378:
374:
370:
366:
359:
354:
348:
344:
339:
333:
249:
248:
193:
192:
175:
110:data structures
56:
49:
42:
35:
32:data dictionary
28:
23:
22:
15:
12:
11:
5:
2803:
2801:
2793:
2792:
2787:
2782:
2777:
2767:
2766:
2760:
2759:
2757:
2756:
2751:
2746:
2741:
2736:
2731:
2726:
2721:
2716:
2711:
2710:
2709:
2699:
2694:
2692:Data structure
2689:
2684:
2678:
2676:
2670:
2669:
2667:
2666:
2661:
2656:
2651:
2646:
2641:
2636:
2631:
2626:
2621:
2616:
2611:
2606:
2601:
2596:
2591:
2585:
2583:
2579:
2578:
2576:
2575:
2574:
2573:
2563:
2558:
2553:
2548:
2543:
2538:
2537:
2536:
2526:
2521:
2516:
2511:
2506:
2501:
2496:
2491:
2486:
2485:
2484:
2473:
2471:
2465:
2464:
2462:
2461:
2460:
2459:
2449:
2443:
2441:
2435:
2434:
2432:
2431:
2426:
2425:
2424:
2419:
2408:
2406:
2400:
2399:
2397:
2396:
2391:
2386:
2385:
2384:
2374:
2373:
2372:
2371:
2370:
2360:
2355:
2350:
2345:
2340:
2339:
2338:
2333:
2331:Half precision
2328:
2318:Floating point
2315:
2310:
2305:
2300:
2294:
2292:
2288:
2287:
2285:
2284:
2279:
2274:
2269:
2264:
2259:
2253:
2251:
2245:
2244:
2239:
2237:
2236:
2229:
2222:
2214:
2205:
2204:
2202:
2201:
2195:
2192:
2191:
2189:
2188:
2183:
2178:
2172:
2170:
2164:
2163:
2161:
2160:
2159:
2158:
2148:
2147:
2146:
2144:Hilbert R-tree
2141:
2136:
2126:
2125:
2124:
2122:Fibonacci heap
2119:
2114:
2104:
2103:
2102:
2097:
2092:
2090:Red–black tree
2087:
2082:
2072:
2066:
2064:
2058:
2057:
2055:
2054:
2049:
2044:
2039:
2034:
2028:
2026:
2020:
2019:
2017:
2016:
2011:
2006:
2001:
1996:
1991:
1985:
1983:
1977:
1976:
1974:
1973:
1972:
1971:
1966:
1956:
1955:
1954:
1947:Priority queue
1944:
1943:
1942:
1932:
1927:
1922:
1921:
1920:
1915:
1904:
1902:
1896:
1895:
1893:
1892:
1887:
1881:
1879:
1875:
1874:
1869:
1867:
1866:
1859:
1852:
1844:
1838:
1837:
1830:
1829:External links
1827:
1824:
1823:
1811:
1797:
1773:
1759:
1741:
1727:
1709:
1691:
1676:
1650:
1629:
1622:
1597:
1593:red–black tree
1585:"Trees in STL"
1576:
1553:
1539:
1537:, pp. 389–397.
1527:
1498:
1496:, pp. 597–599.
1486:
1453:
1446:
1396:
1375:Sanders, Peter
1371:Mehlhorn, Kurt
1355:
1324:
1317:
1291:
1284:
1257:
1256:
1254:
1251:
1250:
1249:
1244:
1238:
1237:
1221:
1218:
1169:Main article:
1166:
1163:
972:and including
942:Main article:
939:
936:
924:
923:
912:.NET Framework
908:
895:
892:
889:
888:
885:
882:
879:
872:
865:
852:
851:
848:
841:
834:
827:
820:
813:
812:
809:
802:
795:
788:
781:
775:
774:
771:
764:
761:
754:
751:
745:
744:
741:
738:
735:
731:
730:
727:
724:
721:
714:
711:
686:
683:
655:big O notation
647:red–black tree
634:
631:
626:Main article:
623:
620:
564:linear probing
548:Main article:
545:
542:
526:sentinel value
497:
496:Implementation
494:
452:
405:
390:
387:
363:
362:
357:
352:
342:
332:
329:
309:
308:
301:
298:
286:
283:
280:
277:
274:
271:
268:
265:
262:
259:
256:
245:
242:
230:
227:
224:
221:
218:
215:
212:
209:
206:
203:
200:
189:
174:
171:
82:that stores a
26:
24:
14:
13:
10:
9:
6:
4:
3:
2:
2802:
2791:
2788:
2786:
2783:
2781:
2778:
2776:
2773:
2772:
2770:
2755:
2752:
2750:
2747:
2745:
2742:
2740:
2737:
2735:
2732:
2730:
2727:
2725:
2722:
2720:
2717:
2715:
2712:
2708:
2705:
2704:
2703:
2700:
2698:
2695:
2693:
2690:
2688:
2685:
2683:
2680:
2679:
2677:
2671:
2665:
2662:
2660:
2657:
2655:
2652:
2650:
2647:
2645:
2642:
2640:
2637:
2635:
2632:
2630:
2627:
2625:
2622:
2620:
2617:
2615:
2614:Function type
2612:
2610:
2607:
2605:
2602:
2600:
2597:
2595:
2592:
2590:
2587:
2586:
2584:
2580:
2572:
2569:
2568:
2567:
2564:
2562:
2559:
2557:
2554:
2552:
2549:
2547:
2544:
2542:
2539:
2535:
2532:
2531:
2530:
2527:
2525:
2522:
2520:
2517:
2515:
2512:
2510:
2507:
2505:
2502:
2500:
2497:
2495:
2492:
2490:
2487:
2483:
2480:
2479:
2478:
2475:
2474:
2472:
2470:
2466:
2458:
2455:
2454:
2453:
2450:
2448:
2445:
2444:
2442:
2440:
2436:
2430:
2427:
2423:
2420:
2418:
2415:
2414:
2413:
2410:
2409:
2407:
2405:
2401:
2395:
2392:
2390:
2387:
2383:
2380:
2379:
2378:
2375:
2369:
2366:
2365:
2364:
2361:
2359:
2356:
2354:
2351:
2349:
2346:
2344:
2341:
2337:
2334:
2332:
2329:
2327:
2324:
2323:
2321:
2320:
2319:
2316:
2314:
2311:
2309:
2306:
2304:
2301:
2299:
2296:
2295:
2293:
2289:
2283:
2280:
2278:
2275:
2273:
2270:
2268:
2265:
2263:
2260:
2258:
2255:
2254:
2252:
2250:
2249:Uninterpreted
2246:
2242:
2235:
2230:
2228:
2223:
2221:
2216:
2215:
2212:
2200:
2197:
2196:
2193:
2187:
2184:
2182:
2179:
2177:
2174:
2173:
2171:
2169:
2165:
2157:
2154:
2153:
2152:
2149:
2145:
2142:
2140:
2137:
2135:
2132:
2131:
2130:
2127:
2123:
2120:
2118:
2117:Binomial heap
2115:
2113:
2110:
2109:
2108:
2105:
2101:
2098:
2096:
2093:
2091:
2088:
2086:
2083:
2081:
2078:
2077:
2076:
2073:
2071:
2068:
2067:
2065:
2063:
2059:
2053:
2050:
2048:
2045:
2043:
2040:
2038:
2035:
2033:
2030:
2029:
2027:
2025:
2021:
2015:
2014:Sparse matrix
2012:
2010:
2007:
2005:
2002:
2000:
1999:Dynamic array
1997:
1995:
1992:
1990:
1987:
1986:
1984:
1982:
1978:
1970:
1967:
1965:
1962:
1961:
1960:
1957:
1953:
1950:
1949:
1948:
1945:
1941:
1938:
1937:
1936:
1933:
1931:
1928:
1926:
1923:
1919:
1916:
1914:
1911:
1910:
1909:
1906:
1905:
1903:
1901:
1897:
1891:
1888:
1886:
1883:
1882:
1880:
1876:
1872:
1865:
1860:
1858:
1853:
1851:
1846:
1845:
1842:
1836:
1833:
1832:
1828:
1820:
1815:
1812:
1807:
1801:
1798:
1787:
1783:
1777:
1774:
1769:
1763:
1760:
1755:
1751:
1745:
1742:
1737:
1731:
1728:
1723:
1719:
1713:
1710:
1705:
1701:
1695:
1692:
1687:
1683:
1679:
1673:
1669:
1665:
1661:
1654:
1651:
1640:
1633:
1630:
1625:
1623:0-201-89685-0
1619:
1615:
1611:
1607:
1606:Knuth, Donald
1601:
1598:
1594:
1590:
1586:
1580:
1577:
1571:
1567:
1566:Mazzolini, L.
1563:
1557:
1554:
1549:
1543:
1540:
1536:
1531:
1528:
1516:
1512:
1505:
1503:
1499:
1495:
1490:
1487:
1484:
1480:
1477:
1473:
1469:
1466:
1460:
1458:
1454:
1449:
1447:0-262-03293-7
1443:
1439:
1435:
1431:
1430:
1425:
1421:
1417:
1413:
1407:
1405:
1403:
1401:
1397:
1389:
1382:
1381:
1376:
1372:
1366:
1364:
1362:
1360:
1356:
1351:
1347:
1343:
1337:
1335:
1333:
1331:
1329:
1325:
1320:
1314:
1310:
1306:
1302:
1295:
1292:
1287:
1281:
1277:
1273:
1269:
1262:
1259:
1252:
1248:
1245:
1243:
1240:
1239:
1235:
1229:
1224:
1219:
1217:
1214:
1209:
1207:
1203:
1199:
1195:
1190:
1188:
1187:
1186:serialization
1182:
1178:
1177:computer file
1172:
1164:
1162:
1160:
1156:
1152:
1151:Visual FoxPro
1148:
1144:
1140:
1136:
1132:
1128:
1124:
1119:
1114:
1110:
1106:
1102:
1098:
1094:
1090:
1086:
1082:
1078:
1074:
1070:
1066:
1062:
1058:
1054:
1050:
1046:
1042:
1038:
1034:
1030:
1026:
1022:
1017:
1015:
1011:
1007:
1003:
999:
995:
991:
987:
983:
979:
975:
971:
967:
963:
959:
955:
950:
945:
937:
935:
933:
929:
921:
917:
913:
909:
902:
901:
900:
893:
886:
883:
880:
877:
873:
870:
866:
863:
858:
854:
853:
849:
846:
842:
839:
835:
832:
828:
825:
821:
819:
815:
814:
810:
807:
803:
800:
796:
793:
789:
786:
782:
780:
777:
776:
772:
769:
765:
762:
759:
755:
752:
750:
747:
746:
742:
739:
736:
733:
732:
718:
712:
710:
708:
704:
700:
696:
692:
684:
682:
680:
679:linear search
676:
670:
668:
667:hash function
664:
660:
656:
650:
648:
644:
641:, such as an
640:
632:
629:
621:
619:
616:
611:
609:
605:
601:
597:
593:
588:
585:
584:hash function
581:
577:
569:
565:
561:
556:
551:
543:
541:
539:
535:
530:
527:
523:
519:
515:
510:
507:
504:, which is a
503:
495:
450:
403:
401:
397:
388:
386:
358:
353:
343:
338:
337:
336:
330:
328:
325:
321:
316:
314:
306:
302:
299:
281:
278:
275:
272:
269:
266:
263:
260:
257:
246:
243:
225:
222:
219:
216:
213:
210:
207:
204:
201:
190:
188:Insert or put
187:
186:
185:
182:
180:
172:
170:
168:
164:
159:
157:
153:
149:
144:
142:
138:
134:
129:
127:
123:
119:
115:
111:
107:
102:
100:
97:
93:
89:
85:
81:
77:
73:
69:
65:
61:
54:
47:
40:
33:
19:
18:Augmented map
2519:Intersection
2493:
1969:Disjoint-set
1907:
1814:
1800:
1789:. Retrieved
1785:
1776:
1762:
1753:
1744:
1730:
1721:
1712:
1703:
1694:
1659:
1653:
1642:. Retrieved
1632:
1613:
1609:
1600:
1592:
1588:
1579:
1569:
1556:
1542:
1530:
1518:. Retrieved
1514:
1511:"dictionary"
1489:
1427:
1379:
1349:
1300:
1294:
1267:
1261:
1210:
1191:
1184:
1180:
1174:
1154:
1138:
1130:
1104:
1068:
1053:dictionaries
1052:
1018:
951:
947:
925:
897:
875:
868:
844:
837:
830:
823:
805:
798:
791:
784:
767:
757:
688:
674:
671:
662:
658:
651:
636:
612:
589:
573:
531:
521:
517:
513:
511:
499:
447:
392:
377:is a value,
364:
334:
317:
310:
183:
176:
160:
145:
130:
118:search trees
105:
103:
95:
75:
72:symbol table
71:
67:
63:
57:
2749:Type theory
2744:Type system
2594:Bottom type
2541:Option type
2482:generalized
2368:Long double
2313:Fixed point
2112:Binary heap
2037:Linked list
1562:Klammer, F.
1438:McGraw-Hill
1155:Collections
1131:hash tables
1123:Common Lisp
1025:Objective-C
905:<map>
816:unbalanced
743:worst case
737:worst case
703:Judy arrays
695:radix trees
685:Other trees
628:Search tree
538:search tree
506:linked list
152:memoization
114:hash tables
2790:Data types
2769:Categories
2654:Empty type
2649:Type class
2599:Collection
2556:Refinement
2534:metaobject
2382:signedness
2241:Data types
2100:Splay tree
2004:Hash table
1885:Collection
1791:2017-04-18
1700:"std::map"
1644:2016-11-20
1520:26 January
1253:References
1159:D language
990:JavaScript
749:Hash table
726:Insertion
713:Comparison
615:cache miss
592:collisions
576:hash table
550:Hash table
534:hash table
373:are keys,
331:Properties
191:add a new
173:Operations
84:collection
76:dictionary
2729:Subtyping
2724:Interface
2707:metaclass
2659:Unit type
2629:Semaphore
2609:Exception
2514:Inductive
2504:Dependent
2469:Composite
2447:Character
2429:Reference
2326:Minifloat
2282:Bit array
2156:Hash tree
2042:Skip list
1989:Bit array
1890:Container
1591:called a
1434:MIT Press
1181:archiving
1109:map (C++)
1037:REALbasic
1021:Smalltalk
669:is used.
657:of O(log
560:CPU cache
305:exception
247:remove a
2754:Variable
2644:Top type
2509:Equality
2417:physical
2394:Rational
2389:Interval
2336:bfloat16
2085:AVL tree
1964:Multiset
1913:Multimap
1900:Abstract
1686:17170456
1608:(1998).
1468:Archived
1388:archived
1220:See also
740:average
734:average
729:Ordered
643:AVL tree
347:, where
320:multimap
313:iterator
154:and the
92:function
2697:Generic
2673:Related
2589:Boolean
2546:Product
2422:virtual
2412:Address
2404:Pointer
2377:Integer
2308:Decimal
2303:Complex
2291:Numeric
2139:R+ tree
2134:R* tree
2080:AA tree
1770:. MSDN.
1722:MS Docs
1101:Haskell
1089:Clojure
954:SNOBOL4
604:pointer
389:Example
2687:Boxing
2675:topics
2634:Stream
2571:tagged
2529:Object
2452:String
2168:Graphs
2129:R-tree
2070:B-tree
2024:Linked
1981:Arrays
1684:
1674:
1620:
1444:
1315:
1282:
1157:. The
1139:tables
1121:); in
1115:, and
1069:hashes
1049:Delphi
1033:Python
1012:, and
998:Python
920:Python
860:(e.g.
836:O(log
822:O(log
804:O(log
797:O(log
790:O(log
783:O(log
396:Python
365:where
122:arrays
99:domain
96:finite
78:is an
2582:Other
2566:Union
2499:Class
2489:Array
2272:Tryte
2062:Trees
1935:Queue
1930:Stack
1878:Types
1682:S2CID
1391:(PDF)
1384:(PDF)
1242:Tuple
1141:. In
1135:Maple
1107:(see
1097:OCaml
1093:Scala
1071:; in
1065:Seed7
1055:; in
1041:Swift
994:Maple
962:MUMPS
884:O(1)
881:O(1)
763:O(1)
753:O(1)
705:, or
699:tries
645:or a
580:array
578:: an
536:or a
383:new()
94:with
74:, or
62:, an
2702:Kind
2664:Void
2524:List
2439:Text
2277:Word
2267:Trit
2262:Byte
2151:Trie
2107:Heap
1925:List
1672:ISBN
1618:ISBN
1522:2022
1442:ISBN
1436:and
1313:ISBN
1280:ISBN
1147:JSON
1125:and
1105:maps
1081:Java
1063:and
1061:Ruby
1057:Perl
1047:and
1029:.NET
1002:Ruby
978:Perl
974:Rexx
966:SETL
918:and
916:Java
850:Yes
811:Yes
598:and
400:JSON
369:and
349:fail
116:and
104:The
2561:Set
2257:Bit
1959:Set
1664:doi
1479:doi
1305:doi
1272:doi
1183:or
1143:PHP
1118:Map
1073:C++
1045:VBA
1019:In
1014:Lua
986:Tcl
982:PHP
970:AWK
958:TMG
887:No
773:No
398:or
150:as
86:of
68:map
58:In
2771::
1784:.
1752:.
1720:.
1702:.
1680:.
1670:.
1595:."
1564:;
1513:.
1501:^
1456:^
1422:;
1418:;
1414:;
1399:^
1373:;
1358:^
1344:;
1327:^
1311:.
1278:.
1208:.
1111:,
1099:,
1095:,
1091:,
1087:,
1085:Go
1083:,
1079:,
1077:C#
1075:,
1059:,
1043:,
1039:,
1035:,
1031:,
1027:,
1023:,
1010:Go
1008:,
1004:,
1000:,
996:,
992:,
988:,
984:,
980:,
976:,
878:)
874:O(
871:)
867:O(
864:)
847:)
843:O(
840:)
833:)
829:O(
826:)
808:)
801:)
794:)
787:)
770:)
766:O(
760:)
756:O(
701:,
697:,
649:.
540:.
318:A
169:.
158:.
124:,
70:,
66:,
2233:e
2226:t
2219:v
1863:e
1856:t
1849:v
1794:.
1756:.
1738:.
1724:.
1706:.
1688:.
1666::
1647:.
1626:.
1574:.
1524:.
1481::
1451:.
1321:.
1307::
1288:.
1274::
922:.
876:n
869:n
845:n
838:n
831:n
824:n
806:n
799:n
792:n
785:n
768:n
758:n
675:n
663:n
659:n
522:k
518:A
514:k
490:}
484::
478:,
472::
466:,
460::
454:{
443:}
437::
431:,
425::
419:,
413::
407:{
379:D
375:v
371:j
367:k
285:)
282:e
279:u
276:l
273:a
270:v
267:,
264:y
261:e
258:k
255:(
229:)
226:e
223:u
220:l
217:a
214:v
211:,
208:y
205:e
202:k
199:(
55:.
48:.
41:.
34:.
20:)
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.