map füllen ohne std::make_pair?



  • Hi!

    Wie kann ich eine Map füllen ohne std::make_pair zu benutzen?



  • Wenn du einen Key ansprichst der noch nicht existiert wird er erstellt. Geht aber natürlich nicht bei Multimaps. nsonsten kannste auch den Konstruktor von std::pair nehmen wenn du meinst das ändert was.



  • std::map<int, int> x;
    x.insert( std::map<int, int>::value_type( 3, 4));
    

    besser:

    typedef std::map<int, int> MyMap; // natürlich ein im Kontext sinnvoller Name (und. ggf. ohne Map in Namen)
    MyMap x;
    x.insert( MyMap::value_type( 3, 4));
    

    oder wie FireFlow vorschlägt:

    std::map<int, int> x;
    x[3] = 4;
    

    Existiert der Key 3 schon, wird der vorherige Wert an der Stelle 3 mit 4 überschrieben. Achtung bei dieser Nutzung:

    cout << x.size() << endl;
      if( x[3] == 4) {
      }
      cout << x.size() << endl;  // x ist um 1 größer geworden
    

    In diesem Fall wird auch ein insert auf die Map x gemacht !!!. Es wird ein mit default Konstruktor erzeugtes Element eingefügt und dass wird dann mit 4 verglichen.



  • typedef std::map<std::string, std::string>  MapType;
    MapType MyMap;
    MyMap.insert(MapType::value_type(str1, str2));
    
    // in der map sieht der typedef so aus
    typedef pair<const _Key, _Tp>                         value_type;
    

Anmelden zum Antworten