Maps

A map holds a key-value pair, with the requirement that the key is unique.

Tip

A C++ map is functionally the same as a dictionary in python.

Here’s an example:

Listing 24 map_example.cpp
#include <iostream>
#include <map>
#include <string>

int main() {

    std::map<std::string, int> a;

    a["one"] = 1;
    a["two"] = 2;

    for (const auto& [key, value] : a) {
        std::cout << "[" << key << "] = " << value << std::endl;
    }

}

We use a structured binding to unpack the key and value into separate variables.

Tip

If we instead loop over our map, a, as:

for (auto e : a) {
    ...
}

Then e will be a std::pair object inside the loop. We would then use e.first and e.second to access the key and value.

Notice that we can freely add to the map simply by using a new key.

In C++20, the contains() member function was added to maps to test if a key is part of a map:

Listing 25 map_contains.cpp
#include <iostream>
#include <map>
#include <string>

int main() {

    std::map<std::string, int> a;

    a["A"] = 1;
    a["B"] = 2;
    a["C"] = 3;

    if (a.contains("D")) {
        std::cout << "element D is a member of the map" << std::endl;
    } else {
        std::cout << "element D is not defined" << std::endl;
    }

}

Tip

To compile this, you likely need to add -std=c++20 to the compilation line.

For older versions of g++, you may instead need -std=c++2a.