std::map
is a sorted associative container that contains key-value pairs with unique keys. Keys are sorted by using the comparison function Compare
.
Search, removal, and insertion operations have logarithmic complexity. Maps are usually implemented as red-black trees.
template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T>>
> class map;
<aside> 📢 In the depending video above, we need to understand the red-black-tree algorithm.
</aside>
<aside> ⚠️ There is a different technique for using a map between all c++ standards.
</aside>
#include <iostream>
#include <map>
#include <string>
int main()
{
std::map<int, int> m;
m[1] = 1;
m[2] = 2;
m[3] = 3;
m[4] = 4;
m.insert(std::make_pair(5, 5));
m.insert(std::make_pair(6, 6));
std::map<int, int>::iterator it = m.begin();
for (; it != m.end(); ++it)
{
std::cout << it->first << " " << it->second << std::endl;
}
std::cout << "m.size() = " << m.size() << std::endl;
m.clear();
std::cout << "after m.clear(), m.size() = " << m.size() << std::endl;
}
output
1 1
2 2
3 3
4 4
5 5
6 6
m.size() = 6
after m.clear(), m.size() = 0
Ok, why do I need to explain the difference between all versions? There is some tricky about it. If you noted the code above, I assign the map to the iterator before I add it to the loop.
std::map<int, int>::iterator it = m.begin();
I use an iterator to access maps on C++ standard 98 because I can't use auto.
#include <iostream>
#include <map>
#include <string>
int main()
{
std::map<int, int> m = {{1, 2}, {3, 4}, {5, 6}};
for (auto &i : m)
{
std::cout << i.first << " " << i.second << std::endl;
}
}