C++ Library - <flat_map>



The <flat_map> header is part of the containers library, provides various functions as a sorted associative container for low memory usage, fast access, and store the key-value pairs with unique keys.

The flat_map container acts as a wrapper to the two underlying containers, and gives a single approach by combining the advantages in both ordered and contiguous storage.

Including <flat_map> Header

To include the <flat_map> header in your C++ program, you can use the following syntax.

#include <flat_map>

Functions of <flat_map> Header

Below is list of all functions from <flat_map> header.

Element Access

The element access functions provide mechanisms like retrieving or modifying elements in the container. This can be done using indices and keys.

S.NO Functions & Description
1 at

This function accesses an element with bounds checking.

2 operator[]

This function access or insert specified element.

Accessing the Element

In the following example we are going to use, operator[] for accessing or insertion of an element.

#include <iostream>
#include <flat_map>
int main() {
    std::flat_map<int, std::string> myMap;
    myMap[1] = "One";
    myMap[2] = "Two"; 
        std::cout << "Element at key 1: " << myMap[1] << std::endl;
    
    return 0;
}

Output

If we run the above code it will generate the following output

Element at key 1: One

Iterators

Iterators provide a way to traverse or manipulate the elements of a container. In flat_map, iterators are used to move from one key-value pair to another.

S.NO Functions & Description
1 begin

These functions returns an iterator to the beginning of the container.

2 end
cend

These functions returns an iterator to the end of the container.

3 rbegin
crbegin

These function returns a reverse iterator to the beginning(last element).

4 rend
crend

These functions returns a reverse iterator to the end(before the first element).

Retrieving the Iterator

In the following example we are going to use, begin() to get an iterator at the beginning of the container.

#include <iostream>
#include <flat_map>
int main() {
    std::flat_map<int, std::string> myMap = {{1, "One"}, {2, "Two"}};
    
    auto it = myMap.begin(); 
    std::cout << "First element: " << it->t << " -> " << it->second << std::endl;
    return 0;
}

Output

If we run the above code it will generate the following output

First element: 1 -> One

Capacity

The capacity functions are used to check and provide information about the containers size and capacity.

S.NO Functions & Description
1 empty

This function checks whether the container adaptor is empty.

2 size

This function returns the number of elements.

3 max_size

This function returns the maximum possible number of elements.

Checking Existence of Container

In the following example we are going to use, empty() to chech whether the container is empty.

#include <iostream>
#include <flat_map>
int main() {
    std::flat_map<int, std::string> myMap;
    
    if (myMap.empty()) {
        std::cout << "The flat_map is empty." << std::endl;
    } else {
        std::cout << "The flat_map is not empty." << std::endl;
    }
    return 0;
}

Output

If we run the above code it will generate the following output

The flat_map is empty.

Modifiers

Modifier Functions change the contents of the container by inserting, replacing, or deleting elements.

S.NO Functions & Description
1 emplace

This function constructs element in-place.

2 emplace_hint

This function constructs elements in-place using a hint for insertion position.

3 try_emplace

This function inserts in-place if the key does not exist, does nothing if the key exists.

4 insert_or_assign

This function inserts an element or assigns to the current element if the key already exists.

5 extract

This function extracts the underlying containers.

6 replace

This function replaces the underlying containers.

7 erase

This function erases elements.

8 erase_if

This function erases all elements satisfying specific criteria.

9 operator=

This function assigns values to the container adaptor.

Inserting an Element In-Place

In the following example we are going to use, emplace() to insert an element in a specific place.

#include <iostream>
#include <flat_map>
int main() {
    std::flat_map<int, std::string> myMap;
    
    myMap.emplace(1, "One"); 
    std::cout << "Element emplaced: " << myMap[1] << std::endl;
    
    return 0;
}

Output

If we run the above code it will generate the following output

Element emplaced: One

Lookup

S.NO Functions & Description
1 find

This function finds element with specific key.

2 count

This function returns the number of elements matching specific key.

3 contains

This function checks if the container contains element with specific key.

4 lower_bound

This function returns an iterator to the first element not less than the given key.

5 upper_bound

This function returns an iterator to the first element greater than the given key.

6 equal_range

This function returns range of elements matching a specific key.

Finding an Element Using Key

In the following example we are going to use, find() to find an element by key.

#include <iostream>
#include <flat_map>
int main() {
    std::flat_map<int, std::string> myMap = {{1, "One"}, {2, "Two"}};
    auto it = myMap.find(1); 
    if (it != myMap.end()) {
        std::cout << "Found element: " << it->first << " -> " << it->second << std::endl;
    } else {
        std::cout << "Element not found." << std::endl;
    }
    return 0;
}

Output

If we run the above code it will generate the following output

Found element: 1 -> One

Observers

The observer functions provide information about how the container operates, particularly regarding key comparison and access to underlying data structures.

S.NO Functions & Description
1 key_comp

This function is used to compares keys.

2 value_comp

Returns the function that compares keys in objects of type value_type.

3 keys

This function provide an direct access to the container of underlying values.

4 values

This function provides an direct access to the container of underlying values.

Comparing the Keys

In the following example we are going to use, key_comp() to compare the keys.

#include <iostream>
#include <flat_map>
int main() {
    std::flat_map<int, std::string> myMap = {{1, "One"}, {2, "Two"}};
    auto comp = myMap.key_comp();
    if (comp(1, 2)) {
        std::cout << "Key 1 is less than Key 2." << std::endl;
    } else {
        std::cout << "Key 1 is not less than Key 2." << std::endl;
    }
    return 0;
}

Output

If we run the above code it will generate the following output

Key 1 is less than Key 2.
Advertisements