Ce face std::set_intersection
std::set_intersection scrie la destinație, în ordine, elementele comune celor două intervale sortate. Un element care apare de m ori într-unul și de n ori în celălalt apare de min(m, n) ori în rezultat.
Lucrează în timp liniar, pentru că avansează simultan prin cele două intervale. Pentru vectori nesortați, sortează-i întâi.
Parametri
| Parametru | Descriere |
|---|---|
first1, last1 |
Primul interval sortat. |
first2, last2 |
Al doilea interval sortat. |
d_first |
Destinația. |
Ce returnează
Iterator după ultimul element scris.
Exemple
Exemplul 1: Prieteni comuni
#include <algorithm>
#include <iterator>
#include <print>
#include <set>
#include <string>
#include <vector>
int main() {
std::set<std::string> prieteni_ana{"Bianca", "Dan", "Ioana", "Mihai"};
std::set<std::string> prieteni_ion{"Andrei", "Dan", "Mihai", "Sorin"};
std::vector<std::string> comuni;
std::set_intersection(prieteni_ana.begin(), prieteni_ana.end(), prieteni_ion.begin(), prieteni_ion.end(),
std::back_inserter(comuni));
std::println("Prieteni comuni: {}", comuni);
}
Rezultat
Prieteni comuni: ["Dan", "Mihai"]
Exemplul 2: Vectori nesortați: sortează întâi
#include <algorithm>
#include <iterator>
#include <print>
#include <vector>
int main() {
std::vector<int> bilete_luni{42, 7, 19, 3, 25};
std::vector<int> bilete_marti{25, 8, 42, 11};
std::ranges::sort(bilete_luni);
std::ranges::sort(bilete_marti);
std::vector<int> ambele_zile;
std::ranges::set_intersection(bilete_luni, bilete_marti, std::back_inserter(ambele_zile));
std::println("{}", ambele_zile);
}
Rezultat
[25, 42]
Greșeli frecvente
- Uiți să sortezi și obții o intersecție incompletă, fără nicio eroare.
Comenzi înrudite
std::set_union: Calculează reuniunea a două intervale sortate: elementele care apar în oricare dintre ele, fără dubluri între ele.std::set_difference: Calculează diferența a două intervale sortate: elementele din primul care nu apar în al doilea.std::includes: Verifică dacă toate elementele unui interval sortat se află și în alt interval sortat (submulțime).