Suchen und Vergleichen von Listen
-
halihallo erstmal

Kann mir jemand vielleicht paar tipps oder lösungen geben, wie man in C++ mit zwei einzelenen Funktionen jeweils Listen sucht und vergleicht?
Danke schonmal im Vorraus!
-
Was für Listen meinst du? Die std::list<> kannst du mit find() durchsuchen und per operator= miteinander vergleichen.
-
Mit dem Zuweisungsoperator vergleichen ?

Aber was dazu gelernt, hab nie listen vergleichen müssen und wäre intuitiv nicht auf die Idee gekommen operator== zu verwenden.
#include <list> #include <iostream> using namespace std; int main(int argc, char* argv[]) { list<int> a; list<int> b; list<int> c; for(int i = 0; i < 10;++i) { a.push_back(i); b.push_back(i); c.push_back(i+1); } cout << (a == b) << endl; cout << (a == c) << endl; return 0; }
-
Knuddlbaer schrieb:
.. wäre intuitiv nicht auf die Idee gekommen operator== zu verwenden.
interessant!
ja warum denn nicht?
Der operator== ist doch dafür da, oder was sonst. Intuitiv würde ich annehmen, dass folgender Code immer geht, solange man T überhaupt sinnvoll vergleichen kann.T a,b; if( a == b ) { // a und b sind gleich.. was immer 'gleich' auch bei einem Typ T bedeutet. Und bei einer std::list< T > ist die Bedeutung von 'gleich' doch relativ klar, oder?
Gruß
Werner
-
Naja, das is halt noch das alte Zeigerdenken , in dem man mit a == b nur die Zeiger verglichen hätte und man selbst alle Elemente durchlaufen musste.
Mit der std::list hab ich nie direkt vergleiche angestellt, im Sinne von templates aber sicherlich schon irgendwo =o)
-
Knuddlbaer schrieb:
Mit dem Zuweisungsoperator vergleichen ?

Tja, man kann immer noch etwas dazulernen

Knuddlbaer schrieb:
Naja, das is halt noch das alte Zeigerdenken , in dem man mit a == b nur die Zeiger verglichen hätte und man selbst alle Elemente durchlaufen musste.
Siehst du, und das ist der Vorteil der Operator-Überladung: Du kannst für deine Klassen einen operator== (so ist's aber richtig) definieren und schon bist du in der Lage, mit einem einfachen
if(a==b)...zwei Objekte zu vergleichen.Und das Standard-Kommitee war so freundlich, den STL-Containern die üblichen Vergleichs-Operatoren (==, !=, < etc) zu spendieren - die vergleichen jeweils den Inhalt der Container (lexikografisch auf Basis der Element-Vergleiche).
-
Siehst du, und das ist der Vorteil der Operator-Überladung: Du kannst für deine Klassen einen operator== (so ist's aber richtig) definieren und schon bist du in der Lage, mit einem einfachen if(a==b)... zwei Objekte zu vergleichen.
Jaja, schon bekannt, man neigt ab und an halt doch noch dazu in den alten Dingen zu denken

-
sorry das ich mich so unklar ausgedrückt habe.
Ich möchte den Inhalt von verketteten Listen vergleichen. Also zu erst eine Eingabe machen z.B. "Berlin" und dann soll halt dieses Wort in den verketteten Listen gesucht bzw. verglichen werden.
Falls das noch immer unklar ist, was ich möchte...dann bitte fragen :xmas1:
-
comovai schrieb:
Ich möchte den Inhalt von verketteten Listen vergleichen. Also zu erst eine Eingabe machen z.B. "Berlin" und dann soll halt dieses Wort in den verketteten Listen gesucht bzw. verglichen werden.
Noch einmal - zum Suchen kannst du find() verwenden (oder alternativ die Liste durchgehen und dein Suchwort mit allen Elementen vergleichen).
Falls das noch immer unklar ist, was ich möchte...dann bitte fragen :xmas1:
Gegenfrage: Ist dir selber klar, was du vorhast?
-
comovai schrieb:
Ich möchte den Inhalt von verketteten Listen vergleichen. Also zu erst eine Eingabe machen z.B. "Berlin" und dann soll halt dieses Wort in den verketteten Listen gesucht bzw. verglichen werden.
Also noch mal ganz ausführlich mit 'find'. Hast Du zu folgendem Code-Schnipsel irgendwelche Fragen?
#include <iostream> // cin, cout #include <list> #include <string> #include <algorithm> // find int main() { using namespace std; list< string > staedte; staedte.push_back( "Hamburg" ); staedte.push_back( "Berlin" ); staedte.push_back( "Frankfurt" ); staedte.push_back( "Hinterhupfingen" ); for( string stadt; cout << "Bitte eine Stadt angeben: ", cin >> stadt; ) { if( find( staedte.begin(), staedte.end(), stadt ) != staedte.end() ) cout << "Die Stadt '" << stadt << "' ist in der Liste enthalten" << endl; else cout << "Die Stadt '" << stadt << "' ist NICHT enthalten" << endl; } return 0; }Gruß
Werner