Efficiently Modify the Keys of Map Items
Learn to modify the keys of map items efficiently.
We'll cover the following...
A map
is an associative container that stores key-value pairs. The container is ordered by the keys. The keys must be unique and they are const
-qualified, so they cannot be changed.
For example, if we populate a map and attempt to change the key, we'll get an error at compilation time:
map<int, string> mymap {{1, "foo"}, {2, "bar"}, {3, "baz"}};auto it = mymap.begin();it->first = 47;
Output:
error: assignment of read-only member ...5 | it->first = 47;| ~~~~~~~~~~^~~~
Remember: If we need to re-order a map container, we may do so by swapping keys using the
extract()
method.
New with C++17, extract()
is a member function in the map class and its derivatives. It allows elements of a map to be extracted from the sequence without touching the payload. Once extracted, the key is no longer const
-qualified and may be modified.
Let's look at an example.
How to do it
In this example we'll define a map that represents contestants in a race. At some point during the race, the order changes and we need to modify ...