...

/

Efficiently Modify the Keys of Map Items

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 ...