std :: mapa a jeho súrodenci ( std :: multimap , std :: unordered_map / multimapa ) boli moje obľúbené kontajnery, keď som robil súťažné programovanie. V skutočnosti ich mám stále rád (aj keď v dnešnej dobe ich používam menej často). A s Moderné C ++ , teraz máme viac dôvodov na použitie std :: map. Preto som sa rozhodol venovať tejto téme napísaním článku, ktorý sumarizuje tieto nové funkcie. Takže bez väčších nezmyslov sa ponoríme priamo.
/!: Tento článok bol pôvodne uverejnený na mojom Blog . Ak máte záujem dostávať moje najnovšie články, prosím prihláste sa na môj newsletter .
std :: mapa :: obsahuje (C ++ 20)
- | _+_ | členská funkcia je dobrým krokom k expresivite kódu. A tiež ma unavuje písať:
std::map::contains
- Z jazyka C ++ 20 môžete písať:
if (auto search = freq_of.find(2); search != freq_of.end()) { cout << 'Found' << endl; } // Where assume, freq_of = map{{3, 1}, {1, 1}, {2, 1}};
Kód, ktorý napíšeme, je napísaný najskôr pre ľudskú spotrebu a až potom pre počítač, aby mu porozumel.
- John Sonmez
std :: mapa :: try_emplace (C ++ 17)
- Pri vkladaní do mapy máme 2 rôzne možnosti:
- Kľúč zatiaľ neexistuje. Vytvorte nový pár kľúč-hodnota.
- Kľúč už existuje. Vezmite existujúcu položku a upravte ju.
- Typický prístup k vloženiu prvku do | _+_ | je pomocou | _+_ |, | _+_ | alebo | _+_ | . Ale vo všetkých týchto prípadoch musíme znášať náklady na predvolený/špecializovaný konštruktér alebo výzvu na priradenie. A najhoršie na tom je, že ak položka už existuje, musíme čerstvo vytvorenú položku zahodiť.
if (freq_of.contains(2)) { cout << 'Found' << endl; }
- Namiesto toho:
std::map
- Ale od C ++ 17 existuje toto metóda std :: map :: try_emplace, ktorá vytvára položky iba vtedy, ak kľúč ešte neexistuje . To zvyšuje výkon v prípade, že je vytvorenie objektov tohto typu nákladné.
- Aj keď vyššie uvedený príklad neukázal nákladné vytváranie položiek. Ale áno! kedykoľvek sa s takouto situáciou stretnete, musíte vedieť, ako ju zvládnuť pomocou | _+_ |.
std :: mapa :: vložiť_alebo_priradiť (C ++ 17)
- Kedykoľvek musíte vložiť prvok. Kvôli pohodliu používate std :: map :: operator [] . Čo je v poriadku (a nebezpečné )! Pokiaľ nemáte žiadne obmedzenia pri vkladaní alebo priraďovaní.
- Napríklad pri počítaní frekvencie prvkov s pridaným obmedzením, že keď sa prvok opakuje (tj. Je priradený), musíte odstrániť všetok prvok menší ako aktuálny.
- V takejto situácii | _+_ | nie je uskutočniteľné. Skôr | _+_ | _ je vhodnejšie a vracia viac informácií ako _ | _+_ |. Tiež nevyžaduje predvolenú konštruovateľnosť mapovaného typu. To isté zvážte aj nasledujúci príklad.
operator[ ]
#programming #coding #cpp11 #cpp #computer-science
medium.com
Použitie std :: map múdro s moderným C ++
std :: map a jej súrodenci (std :: multimap, std :: unordered_map/multimap) bývali moje obľúbené kontajnery, keď som robil konkurenčné…
Pozri Tiež:
- Podrobná príručka na vykonanie procesu inštalácie bezdrôtovej siete HP LaserJet M15W!
- Blazor WebSocket Helper: Všetky ukážky Blazor
- Ako opraviť, aby sa panika jadra nesynchronizovala po inovácii
- Začíname s R Markdown — Sprievodca a Cheatsheet
- Nástroj jq musíte začať používať pre všetky svoje potreby JSON