background preloader


Facebook Twitter

Associative containers (C++) Design[edit] Characteristics[edit] Key uniqueness: in map and set each key must be unique. multimap and multiset do not have this restriction.Element composition: in map and multimap each element is composed from a key and a mapped value.

Associative containers (C++)

In set and multiset each element is key; there are no mapped values.Element ordering: elements follow a strict weak ordering[1] The associative containers can be grouped into two subsets: maps and sets. A map, sometimes referred to as a dictionary, consists of a key/value pair. Both map and set only allow one instance of a key or element to be inserted into the container.

Both maps and sets support bidirectional iterators. While not officially part of the STL standard, hash_map and hash_set are commonly used to improve searching times. Performance[edit] The asymptotic complexity of the operations that can be applied to associative containers are as follows: Overview of functions[edit] C++: STL Map and MultiMap. Sparse array example: (why hold space for thousands of elements when all we have is five) Compile: g++ testMap.cpp Run: .

C++: STL Map and MultiMap

/a.out Employees[3374]=Charlie M. Map size: 5 1923: David D. 3374: Charlie M. 5234: Mike C. 5328: Peter Q. 7582: John A. Example using a "string" as an array index: Map size: 5 Charlie M.: 3374 David D.: 1923 John A.: 7582 Mike C.: 5234 Peter Q.: 5328 Note: The fully defined STL map defines a comparison operator in the map declaration so that the indexes can be ordered. Std::map<int, string, std::less< int > > If defining your own class as the index (first value), C++ will not know how to perform the comparison, thus you will have to provide an operator to perform this function. STL Tutorial - Map Class. Suppose that you're working with some data that has values associated with strings -- for instance, you might have student usernames and you want to assign them grades.

STL Tutorial - Map Class

How would you go about storing this in C++? One option would be to write your own hash table. This will require writing a hash function and handling collisions, and lots of testing to make sure you got it right. On the other hand, the standard template library (STL) includes a templated class to handle just this sort of situation: the STL map class, which conceptually you can think of as an "associative array" -- key names are associated with particular values (e.g., you might use a student name as a key, and the student's grade as the data).

In fact, the STL's map class allows you to store data by any type of key instead of simply by a numerical key, the way you must access an array or vector. To use the map class, you will need to include <map> and maps are part of the std namespace. Std::map <string, char> grade_list; Map. Maps are associative containers that store elements formed by a combination of a key value and a mapped value, following a specific order.


In a map, the key values are generally used to sort and uniquely identify the elements, while the mapped values store the content associated to this key. The types of key and mapped value may differ, and are grouped together in member type value_type, which is a pair type combining both: Internally, the elements in a map are always sorted by its key following a specific strict weak ordering criterion indicated by its internal comparison object (of type Compare). map containers are generally slower than unordered_map containers to access individual elements by their key, but they allow the direct iteration on subsets based on their order.

The mapped values in a map can be accessed directly by their corresponding key using the bracket operator ((operator[]). Maps are typically implemented as binary search trees. Insert. Extends the container by inserting new elements, effectively increasing the container size by the number of elements inserted.


Because element keys in a map are unique, the insertion operation checks whether each inserted element has a key equivalent to the one of an element already in the container, and if so, the element is not inserted, returning an iterator to this existing element (if the function returns a value). For a similar container allowing for duplicate elements, see multimap. Al alternative way to insert elements in a map is by using using member function map::operator[]. Internally, map containers keep all their elements sorted by their key following the criterion specified by its comparison object. The elements are always inserted in its respective position following this ordering. The parameters determine how many elements are inserted and to which values they are initialized: