Problem mit einer Map



  • Servus,
    Ich bin Anfänger auf dem Gebiet C++ und wollte ein Programm schreiben, dass ne Textdatei einliest Zeilenanzahl,Wörteranzahl etc. Ausgibt und ne Wortsuchfunktion hat. Arbeite mich mit Hilfe des C++ Primers durch. Bin bis jetzt ganz gut vorangekommen habe jetzt aber ein problem:

    typedef pair<int,int> location;
    typedef vector<location> loc;
    typedef pair <vector<string>*,loc*> text_loc;
    int main()
    {
        FullScreen();
        vector<string> *datei_zeilen = text_einlesen();//enthält die Zeilen der Datei.1 Zeile = 1 String
        getch();       
        text_loc *woerter_locs = trennen( datei_zeilen );/*Enthält die "zerhackten" Strings die aus datei_Zeilen erstellt werden(1 wort = 1 string)+ Positionen
     jedes wortes im text in loc*(format:(Zeile,Spalte)*/
        filter_woerter( woerter_locs->first, filter_zeichen);//filtert satzzeichen raus aus *woerter_locs
        getlow(woerter_locs->first);//großbuchstaben werden in kleinbuchstaben umgewandelt
        map<string, loc* > *word_map = map_erstellen(woerter_locs);//map wird zur späteren suche verwendet. enthält das wort+pointer auf vector mit locations
        suche(word_map,datei_zeilen);    
    
        system("PAUSE");
    
    	return 0;
    }
    
    ..
    
    void suche(map<string, loc*> *word_map_suche,vector<string> *datei_zeilen_suche)
    {
    
        string suchbegriff;  
    
            cout << "WORT EINGEBEN:";
            cin >> suchbegriff;
            if(suchbegriff==".") cout << ". wurde eingegeben";
    
            map<string, loc*>::iterator it = word_map_suche->find(suchbegriff);        
    
            ..
    }
    

    Nach der Letztten Zeile der Funktion "suche" enthält "it" ja die position des Wortes welches in "suchbegriff" gespeichert ist in *word_map_suche.
    Wie kann jetzt auf die entsprechenden Locations zugreifen? 😕

    Danke im Voraus

    PS:Falls es totaler Müll ist was ich da schreibe bitte nicht auslachen 😞 .



  • Bin mir nicht ganz sicher, ob das richtig ist:

    text_loc *location = (*it).second;
    loc *location_vector = (*location).second;
    //Mit location_vector->at(0...n) kannst du dann auf die Elemente zugreifen
    


  • KPC schrieb:

    Bin mir nicht ganz sicher, ob das richtig ist:

    text_loc *location = (*it).second;
    loc *location_vector = (*location).second;
    //Mit location_vector->at(0...n) kannst du dann auf die Elemente zugreifen
    

    Nein so funktioniert es nicht.



  • Was funktioniert denn nicht ?? Der Zugriff auf die map ist so wie vom KPC beschrieben definitiv richtig. Wenn du da nicht das vorfindest was du erwartest dann hat dein Programm vielleicht noch den einen oder anderen Fehler.



  • Wieso schreiben einige denn
    (*a).b
    statt
    a->b
    Ist das neuerdings cooler 😕



  • Bei Iteratoren muss man das doch schreiben, oder? Bei location macht es in der Tat keinen Sinn. Ich hatte auch kurz drüber nachgedacht wie es richtig ist, bin aber dann wohl zum falschen Schluss gekommen.



  • KPC schrieb:

    Bei Iteratoren muss man das doch schreiben, oder?

    nee.. höchstens wenn der Iterator auf einen Zeiger zeigt. Das sähe dann so aus:

    (*a)->b



  • [quote="DrGreenthumb"]

    KPC schrieb:

    nee.. höchstens wenn der Iterator auf einen Zeiger zeigt. Das sähe dann so aus:

    (*a)->b

    Ich hatte da irgendwas im Kopf, das ältere Implementationen der STL damit Probleme haben, habs aber auch grade in meinen Büchern nicht wiederfinden können.


Anmelden zum Antworten