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] Usage[edit] Iterators[edit] References[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.

The first element in a map can be a class or even another STL container such as a pair. Thus using "char" instead of "string" requires the use of a comparison function: SGI Map Documentation: map Using STL MAP to store class objects: Compile: g++ testMap.cpp Run: . 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. Insert.