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, verwende std::includes . wenn dir die reihenfolge wichtig ist, dann sieh dir std::search oder std::mismatch an. 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.


Anmelden zum Antworten