multimap ja multiset
Salli päällekkäiset avaimet
multimap ja multiset on ilmainen C++ Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu C++ Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Duplikaattien salliminen
std::multimap ja std::multiset toimivat kuten map ja set, mutta ne sallivat duplikaattiavaimet. Kaikki pysyy järjestettynä.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 3, 3, 3};
for (int x : ms) std::cout << x << ' ';
std::cout << '\n';
return 0;
}multisetin lisääminen
Jokainen insert()-kutsu multisetissä onnistuu, myös toistuvien arvojen kohdalla, joten säilö kasvaa joka kerta.
#include <iostream>
#include <set>
int main() {
std::multiset<std::string> ms;
ms.insert("a");
ms.insert("a");
ms.insert("a");
std::cout << ms.size() << " elements\n";
return 0;
}Duplikaattien laskeminen
count() palauttaa nyt, montako kertaa arvo esiintyy, joten tulos voi olla suurempi kuin 1.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{5, 5, 5, 7, 9, 9};
std::cout << "5 appears " << ms.count(5) << " times\n";
std::cout << "9 appears " << ms.count(9) << " times\n";
return 0;
}Kaikkien tai yhden poistaminen
erase(key) poistaa kaikki vastaavat alkiot. Jos haluatte poistaa vain yhden, käyttäkää find()-haun palauttamaa yksittäistä iteraattoria.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 2, 3};
ms.erase(ms.find(2));
std::cout << "count of 2: " << ms.count(2) << '\n';
return 0;
}multimapin perusteet
std::multimap yhdistää avaimet arvoihin, mutta sallii yhden avaimen yhdistämisen useisiin arvoihin. Huomautus: sillä ei ole lainkaan operator[]-operaattoria.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm;
mm.insert({"fruit", 1});
mm.insert({"fruit", 2});
mm.insert({"veg", 3});
std::cout << mm.size() << " pairs\n";
return 0;
}multimapin iterointi
Iterointi tuottaa kaikki parit avainten järjestetyssä järjestyksessä, myös toistuvat avaimet.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm{{"a", 1}, {"a", 2}, {"b", 3}};
for (const auto& [k, v] : mm) {
std::cout << k << " => " << v << '\n';
}
return 0;
}equal_range
equal_range(key) palauttaa iteraattoriparin, joka rajaa kaikki kyseisen avaimen sisältävät alkiot. Se on vakiintunut tapa lukea kaikki tietyn avaimen arvot.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm{{"x", 10}, {"x", 20}, {"y", 30}};
auto range = mm.equal_range("x");
for (auto it = range.first; it != range.second; ++it) {
std::cout << it->second << ' ';
}
std::cout << '\n';
return 0;
}Tietojen ryhmittely
multimap sopii erinomaisesti ryhmittelyyn: esimerkiksi useat henkilöt voivat asua samassa kaupungissa.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, std::string> byCity{
{"NYC", "Alice"}, {"NYC", "Bob"}, {"LA", "Carol"}
};
auto r = byCity.equal_range("NYC");
for (auto it = r.first; it != r.second; ++it)
std::cout << it->second << '\n';
return 0;
}lower_bound multisetissä
Järjestetyt aluekyselyt toimivat edelleen. lower_bound löytää ensimmäisen alkion, joka ei ole kohdetta pienempi.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 3, 4};
auto it = ms.lower_bound(2);
std::cout << "first >= 2 is " << *it << '\n';
return 0;
}Järjestetty frekvenssilista
Koska alkiot pysyvät järjestyksessä, multiset tuottaa luonnostaan järjestetyn tulosteen, jossa toistot säilyvät.
#include <iostream>
#include <set>
int main() {
std::multiset<int> scores{90, 75, 90, 60, 75, 90};
for (int s : scores) std::cout << s << ' ';
std::cout << '\n';
return 0;
}Kokonaismäärä ja yksilölliset arvot
size() laskee jokaisen alkion, myös duplikaatit, kun taas yksilöllisten avainten läpikäynti edellyttää toistojen ohittamista itse.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 1, 2, 3, 3};
std::cout << "total: " << ms.size() << '\n';
std::cout << "count of 1: " << ms.count(1) << '\n';
return 0;
}Pikatarkistus
Testatkaa, miten hyvin ymmärrätte alkioiden poistamista multisetistä.
Kertaus
Opitte, että multimap ja multiset:
- sallivat duplikaattiavaimet ja pysyvät silti järjestettyinä
- käyttävät
equal_range-funktiota kaikkien saman avaimen jakavien arvojen lukemiseen - poistavat
erase(key)-kutsulla kaikki vastaavat alkiot, kun taas iteraattorin poistaminen poistaa yhden alkion
Seuraavaksi opitte hallitsemaan järjestystä mukautettujen vertailijoiden avulla.
Opi C++ tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”multimap ja multiset” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa C++ Academy-oppimispolun 3 oppituntia, myös oppitunnin “multimap ja multiset”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. C++ Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”multimap ja multiset”?
Salli päällekkäiset avaimet Harjoittelet C++ Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C++ Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C++ Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”multimap ja multiset”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C++ Academy-oppitunnilla?
Kyllä. Jokainen C++ Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- std::map
- std::set
- multimap ja multiset
- Mukautetut vertailijat