probleme mit std::set<>::iterator



  • Hallo Leute,

    habe ein Problem mit dem Iterator von std::set<type>::iterator.

    Hier mal ein kleines beispiel.

    #include <iostream>
    #include <map>
    #include <set>
    #include <string>
    #include <vector>
    #include <sstream>
    #include <iterator>
    
    using std::string;
    using std::vector;
    using std::set;
    
    //string& func(set<string>& var)
    string func(set<string> var)
    {
       set<string>::iterator inc = var.begin();
       std::advance(inc,2);
       return *inc;
    }
    
    int main()
    {
       set<string> tmp;
       tmp.insert("a");
       tmp.insert("b");
       tmp.insert("c");
       tmp.insert("d");
       tmp.insert("e");
    
       set<string>::iterator found = tmp.begin();
       std::advance(found,2);
       if(found != tmp.end())
       {
          std::cout << "gefundener bchstabe: " << *found << std::endl;
       }
       string s1=*found;
       std::cout << s1 << std::endl;
    
       return 0;
    }
    

    Nun zu meinem Problem. Wenn ich den auskommentierten Funktionskopf einkommentiere bekomme ich lauter fehler? Warum ist das so? Warum kann ich die Elemente in der set-liste per iterator nicht ändern und als Referenz zurückgeben? Welchen typ gibt der iterator zurück wenn ich ihn dereferenziere?

    Das wars erst mal.

    MFG
    blups0r



  • In einem Set repräsentieren die Elemente die Schlüssel. Diese dürfen nicht geändert werden, da sonst die Sortierung zerstört würde. Da müsstest du ein Element entfernen und neu einfügen.

    Übergibt besser eine Const-Referenz als eine Kopie. Ein ganzes Set zu kopieren ist nämlich meist eine schlechte Idee.


Anmelden zum Antworten