Vektor Komponentenweise vergleichen
-
Hallo,
ich habe zwei Vektoren und möchte beide Vektoren vergleichen. Nicht aber mit dem operator== sonder komponentenweise. Viel mehr will ich schauen ob ein Wert aus Vektor_A in Vektor_B enthalten ist. 2 verschachtelte Schleifen wären meine Idee. Geht das aber noch einfacher mit den Operatoren?
-
Mister Wing schrieb:
Hallo,
ich habe zwei Vektoren und möchte beide Vektoren vergleichen. Nicht aber mit dem operator== sonder komponentenweise. Viel mehr will ich schauen ob ein Wert aus Vektor_A in Vektor_B enthalten ist. 2 verschachtelte Schleifen wären meine Idee. Geht das aber noch einfacher mit den Operatoren?
Du kannst ja einen den =-Operator überladen.

-
Hast Du Dir mal überlegt, ob der std::vector überhaupt die richtige Datenstruktur ist? Vielleicht brauchst Du eher ein std::set.
Ansonsten @drakon: hört mir auf mit Operatorüberladung, wo es nicht wirklich Sinn macht. Es gibt stellen, an denen Operatorüberladung das programm lesbarer macht. Das gehört nicht dazu.
-
wenn du nur einen wert aus dem einen vektor in dem anderen suchst, verwende
std::find;
wenn du wissen willst, ob alle elemente eines vektors in einem anderen enthalten sind und du bereits beide vektoren sortiert hast, verwendestd::includes. wenn dir die reihenfolge wichtig ist, dann sieh dirstd::searchoderstd::mismatchan. ansonsten, also wenn du die reihenfolge behalten willst aber dir nicht wichtig ist, dass die elemente von A in genau derselben reihenfolge in B enthalten sind, musst du dir selbst etwas zusammenstellen.
-
tntnet schrieb:
Hast Du Dir mal überlegt, ob der std::vector überhaupt die richtige Datenstruktur ist? Vielleicht brauchst Du eher ein std::set.
Ansonsten @drakon: hört mir auf mit Operatorüberladung, wo es nicht wirklich Sinn macht. Es gibt stellen, an denen Operatorüberladung das programm lesbarer macht. Das gehört nicht dazu.
Hat er etwas von std::vector geschrieben?
OK. Ich bin von einem UDT, Vektor ausgegangen. Darum der Vorschlag den =-Operator zu überladen.
Aber mit std::vector (oder einem anderen Container) macht das natürlich weniger Sinn.Was die Suche angeht gibt es ja die Standardalgorithmen, die dir sicher weiterhelfen.
http://www.cplusplus.com/reference/algorithm/
-
#include <vector> #include <iostream> #include <algorithm> using namespace std; int main(int argc, char *argv[]){ vector<int> a, b; for(int i = 0; i < 6; i++){ a.push_back(i); b.push_back(9-i); } vector<int> c; sort(a.begin(), a.end()); sort(b.begin(), b.end()); set_intersection(a.begin(), a.end(), b.begin(), b.end(), back_inserter(c)); for(int i = 0; i < c.size(); i++) cout << c[i] << endl; }Geht aber nur bei sortierten Containern.