std::multimap (tsz. std::multimaps)
std::multimap
a 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 a std::map
-hoz képest, ahol egy kulcshoz csak egy érték tartozhat.
std::multimap
főbb jellemzői:std::less<Key>
komparátor szerint).std::set
-hez hasonlóan az elemek mindig rendezettek maradnak.
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;
}
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.
std::multimap
-pal
Az elemeket az insert()
metódussal lehet hozzáadni:
players.insert({10, "Neymar"});
players.insert(make_pair(10, "Pele"));
Mivel egy kulcshoz több érték is tartozhat, többféleképpen lehet keresni:
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!
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.
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);
}
for (const auto& player : players) {
cout << "Mezszám: " << player.first << ", Játékos: " << player.second << endl;
}
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.
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) )
|
✅ | ✅ |