Ce face std::map::extract
extract scoate elementul din map și îl returnează ca „nod” independent (node_type). Elementul nu este copiat și nici distrus. Poți modifica cheia nodului (nod.key()), lucru imposibil cât timp elementul este în map, și apoi îl pui înapoi, sau în alt map, cu insert(std::move(nod)). Dacă cheia nu există, nodul returnat este gol.
a.merge(b) mută în a toate nodurile din b ale căror chei nu există în a. Nodurile cu chei duplicate rămân în b. Nu se face nicio copiere.
Parametri
| Parametru | Descriere |
|---|---|
cheie / poz |
Elementul de extras. |
sursa |
Pentru merge: map-ul din care se mută nodurile. |
Ce returnează
extract: un nod (cu key(), mapped(), empty()). merge: nimic.
Exemple
Exemplul 1: Redenumirea unei chei
#include <map>
#include <print>
#include <string>
#include <utility>
int main() {
std::map<std::string, int> puncte{{"Ion", 50}, {"Maria", 70}};
auto nod = puncte.extract("Ion");
if (!nod.empty()) {
nod.key() = "Ioan"; // cheia se poate schimba doar în afara map-ului
puncte.insert(std::move(nod));
}
std::println("{}", puncte);
}
Rezultat
{"Ioan": 50, "Maria": 70}
Exemplul 2: Unirea a două map-uri cu merge
#include <map>
#include <print>
#include <string>
int main() {
std::map<std::string, int> depozit{{"mere", 10}, {"pere", 5}};
std::map<std::string, int> transport{{"pere", 3}, {"prune", 8}};
depozit.merge(transport);
std::println("depozit: {}", depozit);
std::println("transport: {} (cheia duplicată a rămas aici)", transport);
}
Rezultat
depozit: {"mere": 10, "pere": 5, "prune": 8}
transport: {"pere": 3} (cheia duplicată a rămas aici)
Greșeli frecvente
- Crezi că
mergeadună valorile cheilor comune. Nu: păstrează valoarea din map-ul destinație, iar perechea duplicată rămâne în sursă. - Inserezi un nod gol (cheia nu exista). Verifică
nod.empty()înainte de a accesakey().
Comenzi înrudite
std::map: Dicționar ordonat: asociază fiecărei chei unice o valoare și păstrează cheile sortate.std::map::erase: Șterge din map o cheie (cu valoarea ei), elementul indicat de un iterator sau un interval.std::map::insert: Adaugă o pereche cheie-valoare doar dacă cheia nu există; spune prin rezultat dacă a adăugat-o.std::list::splice: splice() mută noduri dintr-o listă în alta fără copiere; merge() interclasează două liste sortate.