- mapa to zbiór par (klucz - Key, wartość - Value)
std::map
w C++ to odpowiednikdict
z Pythona
Przykładowo tworzymy kolekcję ulubionych płyt i układamy je w szafce.
Oczywiście płyt tych mamy ogromną liczbę i chcielibyśmy móc łatwo odnaleźć płytę, gdy będziemy jej poszukiwać.
W tym celu numerujemy sobie wszystkie płyty i zapisujemy sobie na kartce informacje, pod jakim numerem znajduje się określony tytuł. W ten sposób tworzymy właśnie mapę.
std::map<size_t, std::string> discs {
{1, "The Lord of the Rings: The Fellowship of the Ring"},
{2, "The Lord of the Rings: The Two Towers"},
{3, "The Lord of the Rings: The Return of the King"}
};
Kluczem jest tutaj numer, natomiast wartością jest tytuł filmu.
-
początek i koniec zakresu
begin()
end()
-
informacje o liczbie elementów w mapie
size()
-
informacja czy mapa jest pusta
empty()
-
dostęp do elementu dla określonego klucza
operator[key]
-
dodanie parę (klucz, wartość) do mapy o ile taka para jeszcze w niej nie występuje
insert({key, value})
Dokumentacja na cppreference.org
Co się wydarzy, gdy zawołamy na wspomnianej mapie:
discs[4] = "Harry Potter";
Przypisanie czegoś do elementu mapy poprzez operator[]
sprawia, że:
- jeżeli istnieje już wartość dla danego klucza to ją podmienimy.
- gdy nie istnieje wartość dla danego klucza, to utworzymy nową parę (klucz, wartość)
#include <iostream>
#include <map>
#include <string>
void Print(const std::map<size_t, std::string>& map) {
for (const auto& pair : map) {
std::cout << pair.first << " | " << pair.second << '\n';
}
}
int main() {
std::map<size_t, std::string> discs {
{1, "The Lord of the Rings: The Fellowship of the Ring"},
{2, "The Lord of the Rings: The Two Towers"},
{3, "The Lord of the Rings: The Return of the King"}
};
Print(discs);
std::cout << "\nAfter adding a new element\n";
discs[4] = "Harry Potter";
Print(discs);
std::cout << "\nAfter modification of an element\n";
discs[4] = "Harry Potter and the Philosopher's Stone";
Print(discs);
}
1 | The Lord of the Rings: The Fellowship of the Ring
2 | The Lord of the Rings: The Two Towers
3 | The Lord of the Rings: The Return of the King
After adding a new element
1 | The Lord of the Rings: The Fellowship of the Ring
2 | The Lord of the Rings: The Two Towers
3 | The Lord of the Rings: The Return of the King
4 | Harry Potter
After modification of an element
1 | The Lord of the Rings: The Fellowship of the Ring
2 | The Lord of the Rings: The Two Towers
3 | The Lord of the Rings: The Return of the King
4 | Harry Potter and the Philosopher's Stone
Napisz funkcję, która przyjmuje std::vector<int>
oraz std::list<std::string>
i zwraca mapę std::map<int, std::string>
. Kluczami w mapie mają być elementy wektora, a wartościami elementy listy. Pobierz zadanie
#include <iostream>
#include <list>
#include <string>
#include <vector>
// Implement createMap. It should take a vector and list and
// return a map of merge them as keys from the vector and values from the list
int main() {
std::vector<int> vec{1, 2, 3, 4, 5};
std::list<std::string> list{"One", "Two", "Three", "Four", "Five"};
auto map = createMap(vec, list);
for (const auto& pair : map)
std::cout << pair.first << " | " << pair.second << '\n';
return 0;
}