Ich versuche, zwei Vektorobjekte zu vergleichen und gebe einen einzelnen Vektor zurück, der alle Zeichen enthält, die in beiden Vektoren erscheinen.
Wie würde ich darüber gehen, ohne eine schrecklich komplexe manuelle Methode zu schreiben, die jedes Zeichen im ersten Vektor mit jedem Zeichen im zweiten Vektor vergleicht und ein if benutzt, um es einem dritten Vektor hinzuzufügen (der zurückgegeben würde) Übereinstimmung.
Vielleicht ist mein Mangel an echten Erfahrungen mit Vektoren dafür verantwortlich, dass dies schwieriger wird, als es wirklich ist, aber ich vermute, dass es einen einfacheren Weg gibt, den ich durch das Suchen nicht finden konnte.
Ich denke, Sie suchen std::set_intersection
. Die Quellvektoren müssen jedoch sortiert sein. Wenn Ihnen die Reihenfolge Ihres Ausgabevektors egal ist, können Sie sie immer auf sortierten Kopien Ihrer Quellvektoren ausführen.
Und übrigens, der manuelle naive Weg ist nicht schrecklich komplex. Bei zwei Quellvektoren s1
und s2
und einem Zielvektor dest
könnten Sie etwas schreiben, das so aussieht:
Sie haben viele Optionen für den Schritt find
abhängig von Ihrer Wahl der Datenstruktur.
Verwenden Sie set_intersection . Hier ist ein funktionierendes Beispiel:
%Vor%Da sich aus Ihrer späteren Frage herausstellt, interessieren Sie sich eigentlich nur für 26 Zeichen:
%Vor% Tatsächlich ist ein bitset<UCHAR_MAX>
auf fast allen Architekturen klein. Achten Sie nur auf diese DSPs mit 32-Bit-Zeichen und seien Sie vorsichtig, diese Technik an wchar_t
anzupassen.
Mit BOOST_FOREACH sieht der Code sogar vernünftig aus:
%Vor%Tags und Links c++ vector comparison