std::vector und co abspeichern / laden



  • Hi,

    ich bin grade dabei einen Leveleditor zu coden fürn 2D game, funzt super! Doch jetzt will ich meine Daten abspeichern!

    Ich benutze Vectoren, Maps und Lists. Wie kann ich die abspeichern in eine TXT?

    Ich möchte es gerne mit FILE aus C gerne tun, da ich mich mit den streams aus C++ nicht auskenne!

    Hat jemand ne Idee wie man die Daten speichert und wieder läd?

    Schon mal dickes Danke im voraus! 🙄

    Gruß,
    Ikari



  • Dir wird (denke ich) nichts anderes Übrig bleiben als über die maps list etc. mit einen Itrator zu wandern und jedes Element einzeln zu sichen.



  • naja der nachteil ist ich hab sowas vorher noch nie gemacht, hat jemand ein beispiel dafür?



  • Original erstellt von Knuddlbaer:
    Dir wird (denke ich) nichts anderes Übrig bleiben als über die maps list etc. mit einen Itrator zu wandern und jedes Element einzeln zu sichen.

    Vectoren kannst du am Stück abspeichern die anderen musst du einzeln abspeichern



  • #include <map>
    #include <list>
    #include <fstream>
    #include <iostream>
    #include <string>
    
    #pragma argsused
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        map<string,int> mymap;
        list<string> mylist;
    
        // Datei öffnen
        ofstream file ("Erg.txt");
    
        // Ein paar Werte anlegen
        mymap.insert(make_pair("Zeile1",1));
        mymap.insert(make_pair("Zeile2",1));
        mymap.insert(make_pair("Zeile3",1));
        mymap.insert(make_pair("Zeile4",1));
    
        mylist.push_back("ListItem1");
        mylist.push_back("ListItem2");
        mylist.push_back("ListItem3");
        mylist.push_back("ListItem4");
    
        // Hier den genauen Typ angeben der oben verwendet wurde
        // und dann ein ::iterator anfügen
        map<string,int>::iterator pIterMap;
        list<string>::iterator pIterList;
    
        file<<"Map Items\n";
    
        // .begin() zeigt auf den Anfang der map und .end() HINTER das letzte Element der map
        for(pIterMap = mymap.begin();pIterMap != mymap.end();++pIterMap)
            file<<pIterMap->first<<"="<<pIterMap->second<<'\n';
    
        file<<"\nList Items";
        for(pIterList = mylist.begin(); pIterList != mylist.end();++pIterList)
            file<<*pIterList<<'\n';
    
        return 0;
    }
    //---------------------------------------------------------------------------
    

    Schau Dir mal im Tutorial die Themen Iteratoren map und list an. Hilft Dir garantiert weiter.

    [ Dieser Beitrag wurde am 09.11.2002 um 22:58 Uhr von Knuddlbaer editiert. ]



  • @Knuddlbaer
    Danke, der code hilft mir sehr weiter 🙂 aber wie lade ich die daten wieder?? 😕



  • ifstream mit operator>>. die schleifen wirst du ja noch hinkriegen. immer in ein temporaeres objekt einlesen und dann pushen.



  • Hi,
    ich habe gerade die "Knuddelbaer v2" versucht,
    aber irgendwie scheint das nicht zu gehn wenn man Benutzerdefinierte-Typen (in meinem Fall ein Struct) verwendet.
    kann mir da jemand helfen bzw. einen anständigen WorkAround tip geben ?

    edit:
    oh, ja hier noch die fehlermeldung:

    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\iterator(213):
    error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'AGENDA' (or there is no acceptable conversion)
    

    AGENDA ist btw. der Struct um den es sich handelt


Anmelden zum Antworten