std::multimap
Főnév
std::multimap (tsz. std::multimaps)
- (informatika) A
std::multimapa C++ STL (Standard Template Library) egyik asszociatív tárolója, amely kulcs-érték párokat tárol, és lehetővé teszi egy kulcshoz több érték hozzárendelését. Ez a fő különbség astd::map-hoz képest, ahol egy kulcshoz csak egy érték tartozhat.
std::multimap főbb jellemzői:
- Rendezett tároló: Az elemek kulcs szerint növekvő sorrendben tárolódnak (alapértelmezés szerint
std::less<Key>komparátor szerint). - Több azonos kulcsú elem: Egy kulcshoz több érték is tartozhat.
- Automatikusan rendezi az elemeket: A
std::set-hez hasonlóan az elemek mindig rendezettek maradnak.
Alapvető használat std::multimap-pal
#include <iostream>
#include <map>
using namespace std;
int main() {
// Multimap deklarálása (kulcs: int, érték: string)
multimap<int, string> players;
// Elemeinek beszúrása
players.insert({10, "Messi"});
players.insert({7, "Ronaldo"});
players.insert({10, "Mbappe"});
players.insert({7, "Beckham"});
players.insert({9, "Lewandowski"});
// Kiíratás
cout << "Multimap tartalma:\n";
for (const auto& p : players) {
cout << "Mezszám: " << p.first << ", Játékos: " << p.second << endl;
}
return 0;
}
Kimenet:
Multimap tartalma: Mezszám: 7, Játékos: Beckham Mezszám: 7, Játékos: Ronaldo Mezszám: 9, Játékos: Lewandowski Mezszám: 10, Játékos: Messi Mezszám: 10, Játékos: Mbappe
💡 Megjegyzés: Az azonos mezszámú játékosok automatikusan növekvő sorrendben kerülnek tárolásra.
Fontos műveletek std::multimap-pal
1️⃣ Elemek beszúrása
Az elemeket az insert() metódussal lehet hozzáadni:
players.insert({10, "Neymar"});
players.insert(make_pair(10, "Pele"));
2️⃣ Elemek keresése (find, equal_range, lower_bound, upper_bound)
Mivel egy kulcshoz több érték is tartozhat, többféleképpen lehet keresni:
🔍 Egy konkrét kulcs első előfordulása (find())
auto it = players.find(10);
if (it != players.end()) {
cout << "Mezszám: " << it->first << ", Játékos: " << it->second << endl;
}
➡ Ez csak az első előfordulást adja vissza!
🔍 Összes adott kulcshoz tartozó elem (equal_range())
auto range = players.equal_range(10);
for (auto it = range.first; it != range.second; ++it) {
cout << "Mezszám: " << it->first << ", Játékos: " << it->second << endl;
}
➡ Ez a megoldás az összes 10 mezszámú játékost kiírja.
3️⃣ Elemek törlése
Egy adott kulcs összes értékének törlése:
players.erase(10); // Az összes 10-es mezszámú játékost törli
Csak egy adott érték törlése egy kulcsnál:
auto it = players.find(10); // Csak az első 10-es mezszámú játékost törli if (it != players.end()) { players.erase(it); }
4️⃣ Elemek bejárása és kiíratása
for (const auto& player : players) {
cout << "Mezszám: " << player.first << ", Játékos: " << player.second << endl;
}
Mikor használjunk std::multimap-ot?
✅ Ha egy kulcshoz több érték is tartozhat (pl. több játékos ugyanazzal a mezszámmal).
✅ Ha az adatokat rendezetten szeretnénk tárolni és gyors keresési lehetőségre van szükség.
✅ Ha fontos, hogy a beszúrt elemek automatikusan növekvő sorrendben legyenek tárolva.
❌ Ha egy kulcshoz csak egy érték tartozhat, akkor std::map jobb választás.
❌ Ha gyorsabb hozzáférés kell, mint a std::multimap, akkor std::unordered_multimap lehet előnyösebb.
Összegzés
| Tulajdonság | std::map |
std::multimap |
|---|---|---|
| Egyedi kulcsok | ✅ | ❌ (több azonos kulcs is lehet) |
| Rendezett tárolás | ✅ | ✅ |
| Kulcshoz tartozó egyetlen érték | ✅ | ❌ |
| Kulcshoz tartozó több érték | ❌ | ✅ |
Gyors keresés (O(log n)) |
✅ | ✅ |
- std::multimap - Szótár.net (en-hu)
- std::multimap - Sztaki (en-hu)
- std::multimap - Merriam–Webster
- std::multimap - Cambridge
- std::multimap - WordNet
- std::multimap - Яндекс (en-ru)
- std::multimap - Google (en-hu)
- std::multimap - Wikidata
- std::multimap - Wikipédia (angol)