std::map::count
Főnév
std::map::count (tsz. std::map::counts)
- (informatika) A
std::map::countfüggvény a C++ Standard Template Library (STL) egyik tagfüggvénye, amely egy adott kulcs előfordulásainak számát adja vissza egystd::mapvagystd::multimaptípusú tárolóban.
🔷 1. Alapfogalom: Mi az a std::map?
A std::map<K, V> egy rendezett asszociatív konténer, amely kulcs-érték (key-value) párokat tárol, ahol:
- Minden kulcs egyedi (
unique), - A kulcsok automatikusan növekvő sorrendben rendeződnek (alapértelmezett:
operator<alapján), - A belső megvalósítás általában piros-fekete fa (red-black tree).
Példa:
std::map<std::string, int> szotar;
szotar["alma"] = 3;
szotar["korte"] = 5;
🔷 2. Mi a count() szerepe?
A count() függvény megmondja, hogy létezik-e egy adott kulcs a map-ben.
Szintaxis:
size_t count(const Key& k) const;
Mit ad vissza?
0, ha a kulcs nem szerepel a map-ben,1, ha a kulcs benne van (mertstd::map-ben legfeljebb egyszer lehet jelen).
Megjegyzés: std::map → 0 vagy 1, std::multimap → 0 vagy több (ott a count() számolja az összes előfordulást is).
🔷 3. Egyszerű példa
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> gyumolcsok;
gyumolcsok["alma"] = 2;
gyumolcsok["banan"] = 4;
if (gyumolcsok.count("alma") > 0) {
std::cout << "Van alma.\n";
} else {
std::cout << "Nincs alma.\n";
}
std::cout << "Narancs: " << gyumolcsok.count("narancs") << " darab\n";
}
Kimenet:
Van alma. Narancs: 0 darab
🔷 4. Működés a háttérben
A count() belsőleg a find() függvényt használja:
return find(k) == end() ? 0 : 1;
Ez logikai szempontból hasonló a következőhöz:
if (map.find(kulcs) != map.end()) {
// kulcs megtalálva
}
🔷 5. Alternatívák a count() helyett
find()– visszaadja az iterator-t, ha létezik a kulcs.contains()(C++20-tól!) – sokkal olvashatóbb:
if (map.contains("korte")) {
// C++20: gyorsabb és elegánsabb
}
🔷 6. std::multimap esetén
A count() megmondja, hányszor szerepel egy kulcs.
std::multimap<std::string, int> jegyek;
jegyek.insert({"Anna", 5});
jegyek.insert({"Anna", 4});
jegyek.insert({"Bela", 3});
std::cout << "Anna jegyeinek száma: " << jegyek.count("Anna") << "\n";
Kimenet:
Anna jegyeinek száma: 2
🔷 7. Miért hasznos a count()?
- Feltételvizsgálathoz ideális (pl.
if (map.count(kulcs)) ...) - Gyors: O(log n) időben fut (
std::mapesetén) - Biztonságos: nem ír bele a map-be (ellentétben pl.
operator[]-tel)
🔷 8. Gyakori hibák
❌ Használat operator[]-tel teszteléshez:
if (map["kulcs"]) { ... } // HIBA, ha nem volt benne, most bekerült!
Ez automatikusan beszúrja a kulcsot alapértelmezett értékkel!
✅ Helyette:
if (map.count("kulcs")) { ... } // Nem szúr be semmit
🔷 9. Típus kompatibilitás és sablonhasználat
A count() működéséhez fontos, hogy a megadott kulcs típus kompatibilis legyen a map kulcsával.
std::map<int, std::string> m;
m[42] = "negyvenketto";
// m.count("42") // HIBÁS: nem int típus
🔷 10. Teljes példa – szótár lekérdezés
#include <iostream>
#include <map>
#include <string>
void kerdezes(const std::map<std::string, std::string>& szotar, const std::string& szo) {
if (szotar.count(szo)) {
std::cout << szo << " jelentése: " << szotar.at(szo) << "\n";
} else {
std::cout << "Nincs ilyen szó a szótárban.\n";
}
}
int main() {
std::map<std::string, std::string> szotar = {
{"alma", "apple"},
{"korte", "pear"},
{"szilva", "plum"}
};
kerdezes(szotar, "alma");
kerdezes(szotar, "barack");
}
Kimenet:
alma jelentése: apple Nincs ilyen szó a szótárban.
🔷 11. Időbeli és térbeli jellemzők
- Időkomplexitás: O(log n) – mivel belsőleg fa szerkezetet használ,
- Térigény: nincs extra memóriaigénye, csak olvasást végez.
🔷 12. Összefoglalás táblázatban
| Tulajdonság | std::map::count |
|---|---|
| Visszatérési érték | 0 vagy 1 (std::map), tetszőleges n (std::multimap) |
| Bemenet | Kulcs típus (const K&) |
| Használat célja | Kulcs létezésének ellenőrzése |
| Komplexitás | O(log n) |
| Alternatívák | find(), contains() (C++20) |
| Veszély | Ne keverd össze operator[]-tel, az módosít! |
🔷 13. Záró gondolatok
A count() egy kicsi, de fontos funkció az STL-ben, amely segít elkerülni a kulcsok akaratlan beszúrását. Különösen jól használható ellenőrzésekre, keresések előtti szűrésre, valamint több példányt kezelő multimap-ek esetén gyakorisági elemzésre.
- std::map::count - Szótár.net (en-hu)
- std::map::count - Sztaki (en-hu)
- std::map::count - Merriam–Webster
- std::map::count - Cambridge
- std::map::count - WordNet
- std::map::count - Яндекс (en-ru)
- std::map::count - Google (en-hu)
- std::map::count - Wikidata
- std::map::count - Wikipédia (angol)