Veröffentlicht 16. Juni 200520 j Zwei Fragen : 1. Wie kann ich in einem Vector beliebigen Satz finden ? 2. Wie kann ich in einem Vector beliebigen Satz ändern?
16. Juni 200520 j Hallo, da bist du ja knapp über die 10 Zeichen Mindestanfoderung hinausgekommen. 1. Du musst deinen Vector von vorne bis hinten nach dem entsprechenden Begriff durchsuchen....Stichwort: Schleife und Iterator Oder, besser, mit find: http://www.parashift.com/c++-faq-lite/class-libraries.html#faq-37.3 2. Ändern kannst du ganz einfach, sofern der Iterator auf den entsprechenden Vectoreintrag zeigt Vielleicht hilft dir das im Ansatz weiter: http://www.cppreference.com/iterators.html EDIT: Wenn du überwiegend Suchen möchtest, bietet sich evtl. noch ein set an: http://www.cppreference.com/cppset/
16. Juni 200520 j Autor 1. Du musste deinen Vector von vorne bis hinten nach dem entsprechenden Begriff durchsuchen....Stichwort: Schleife und Iterator gibt es keine find Methode wie bei map und so algemein was ist besser für meinen einsatz, ich habe ja eine struct sagen wir typedef struct { int index; long fallid; short iStatus; } tTest; [/PHP] die übergebe ich einem vector vector<tTest, allocator<tTest> > m_tTest; dann schreibe ich par Daten rein und jetzt entlich will ich was in dem vector ändern, einfügen usw.
16. Juni 200520 j gibt es keine find Methode wie bei map Doch, std::find. Fiel mir aber auch erst später ein. Hier vielleicht noch ein besseres Beispiel: http://gpwiki.org/index.php/Standard_Template_Library
16. Juni 200520 j Autor Doch, std::find. Fiel mir aber auch erst später ein. QUOTE] also vector hat keine find Methode, oder mindestens kann ich nichts finden
16. Juni 200520 j carstenj hat dir doch schon alles gegeben was du brauchst. Schau mal auf den Link den er vorher gepostet hat, da steht alles was du brauchst: [...] std::vector<int> bigvector; // Some code filling bigvector with lots of stuff: std::vector<int>::iterator five = std::find(bigvector.begin(), bigvector.end(), 5); // Five will be bigvector.end() if there is no element 5 found, // otherwise it will point to the first 5 in the vector. [...] (aus http://gpwiki.org/index.php/Standard_Template_Library ) wo liegt das problem? greetz (der etwas ratlose) mep...
16. Juni 200520 j Autor wo liegt das problem? soger zwei probleme :confused: da ich in dem vector nicht nur ein einziegen Wert vector<int> habe sondern eine struct und zweites prob. error C2039: 'find' : Ist kein Element von 'std'
16. Juni 200520 j Hallo, zu 1.) Ich denke das du für std::find den "operator==()" in deinem struct implementieren musst um entsprechend danach zu suchen (naheliegende Vermutung - werde ich aber gleich mal testen). zu 2.) Hast du die Includedatei <algorithm> eingebunden? (Wenn ich die rausgenommen hab in meinem Testprogramm, bekam ich auch diesen Fehler) Gruß mep
16. Juni 200520 j Autor Man kann auch find_if benutzen, da kann man ein Vergleichsfunktionsobjekt angeben. jetzt wird komplieziert kannst Du einen Beispiel zeigen
16. Juni 200520 j Man kann auch find_if benutzen, da kann man ein Vergleichsfunktionsobjekt angeben. Stimmt, das geht auch Wäre meine zweite Option gewesen. Das ist, denke ich , auch sauberer als in einem struct Operatoren zu überladen. Nichtsdestotrotz hab ich das gerade erfolgreich mal getestet um das von oben zu ergänzen greetz mep
16. Juni 200520 j kannst Du einen Beispiel zeigen #include <vector> #include <algorithm> #include <iostream> using namespace std; struct Daten { int wichtig; int egal; }; struct FindeWichtig { bool operator()(const Daten& daten) { return daten.wichtig == w_; } int w_; }; int main() { vector<Daten> v; Daten d1 = { 1, 2 }; Daten d2 = { 3, 6 }; Daten d3 = { 8, 42 }; v.push_back(d1); v.push_back(d2); v.push_back(d3); FindeWichtig fw; fw.w_ = 3; vector<Daten>::iterator i = find_if(v.begin(), v.end(), fw); if(i != v.end()) { cout << "Gefunden (egal=" << i->egal << ")\n"; } }[/code]
16. Juni 200520 j Autor Danke Klotzkopp, habe ich verstanden Noch was jetzt will ich den vector in eine andere Klasse aufrufen. Muss ich in der Klass wieder die structur definieren oder wie kann man es am einfachstem lösen ?
16. Juni 200520 j Autor Noch was jetzt will ich den vector in eine andere Klasse aufrufen. Muss ich in der Klass wieder die structur definieren oder wie kann man es am einfachstem lösen ? das könt ihr vergessen :eek ist aber der einsatz mit einem vector im meinem Fall ok, oder lieber list map usw benutzen ??
16. Juni 200520 j ist aber der einsatz mit einem vector im meinem Fall ok, oder lieber list map usw benutzen ??Das lässt sich mit den Informationen, die du bisher geliefert hast, nicht sagen. Wie sehen die Anwendungsfälle aus? Viele Einfüge-/Löschvorgänge? Falls ja, vorne oder hinten oder mittendrin? Oder statische Daten? Viele Suchvorgänge oder Zugriffe über Index?
17. Juni 200520 j Autor Das lässt sich mit den Informationen, die du bisher geliefert hast, nicht sagen. Wie sehen die Anwendungsfälle aus? Viele Einfüge-/Löschvorgänge? Falls ja, vorne oder hinten oder mittendrin? Oder statische Daten? Viele Suchvorgänge oder Zugriffe über Index? Also in dem vector können maximal 5 Einträge sein Einfügen immer hinten, ändern beliebig aber auch nicht oft und dem entsprechend nicht viele Zugriefen über Index. Ich Speiche/Bearbeite die Daten im vector damit ich sie später in andere Klasse ausgeben kann.
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.