std::map element gesetzt



  • wie kann man nach prüfen ob eine elemant schon gesetzt wurde
    z.b.

    class My{};
    std::map<unsigned int,My> my_map;
    my_map[0] = My (); //element 1 gesetzt
    my_map[1] = My (); //element 2 gesetzt
    int i = 0;
    loop{
    if (/*my_map[i] nicht gesetzt?*/){
         my_map[i] = My ();
         break;
    }
    i++;
    }
    


  • ...
    if (my_map.find(i) != my_map.end()){
    ...
    }
    

    Aber Du kannst natürlich auch einfach setzen (per insert()) und anschließend prüfen, ob gesetzt wurde oder nicht (anhand des Returnwertes von insert()).

    Gruß,

    Simon2.

    P.S.: Mit "break" würde ich da möglichst nicht arbeiten, das ist außerhalb von switch/case doch eher unüblich....



  • Du kannst es suchen 😉

    if(my_map.find(i)==my_map.end())
    {
      //mach was
    }
    


  • cool thx , hab jetzt noch ne kleine fragen zur std::map

    std::vector<int> x;
    x.push_back(10);
    x.push_back(50);
    x.push_back(25);
    x.push_back(11);
    for(int i = 0;i < x.size();i++)
         //mach was mit, x[i]
    

    wie kann ich das selbe mache also nach einander auf den inhalt der std::map zugreifen



  • Mit iteratoren

    for( std::map<unsigned int,My>::iterator it = my_map.begin(); it!=my_map.end(); ++it)
    {
    // hier was mit it machen
    }
    


  • ok,thx
    hab jetzt aber noch ein problem

    struct Src_Rect{
      int x;
      int y;
      int w;
      int h;
    };
    std::map< unsigned int,std::vector<Src_Rect> > images;
    std::map< unsigned int,std::vector<Src_Rect> >::iterator it;
    for(it = images.begin(); it != images.end(); ++it){
    	for(int j = 0;j < it->size();j++)  //hier z.b. size()
                  //mach was (eine zeile)
    }
    

    wie kann nich auf die elemete oder funktionen vom std::vector zu greifen
    meldung:
    Fehler: »struct std::_Rb_tree_iterator<std::pair<const unsigned int, std::vector<Graphics::Src_Rect, std::allocatorGraphics::Src_Rect > > >« hat kein Element namens »size«



  • kiba91 schrieb:

    wie kann nich auf die elemete oder funktionen vom std::vector zu greifen
    meldung:
    Fehler: »struct std::_Rb_tree_iterator<std::pair<const unsigned int, std::vector<Graphics::Src_Rect, std::allocatorGraphics::Src_Rect > > >« hat kein Element namens »size«

    typedef std::map<unsigned int, std::vector<Src_Rect> > mmap;
    mmap mymap;
    for(mmap::iterator it = mymap.begin(); it != mymap.end(); ++it)
      for(mmap::mapped_type::iterator j = it->second.begin(); j != it->second.end() ; ++j)
    	; // mache etwas mit j
    

    mit deinem mapiterator greifst du über it->second auf das gemappte Element (in dem Fall der std::vector) zu.
    Hier habe ich mal ein Beispiel wie du dich durch die Map und für jedes Mapelement durch den vector durchiterierst ...


Anmelden zum Antworten