mapinhalt in vector schieben?
-
Gibts dafür irgendeine tolle funktion oder muss ich alles selbst mit einer forschleife machen? Dachte da an sowas wie
vector.insert(map) oder so
-
Also wenn du das komplette map (sprich alle std::pair<Key,Value>) kopieren willst geht das recht hypsch.
myvec.insert(myvec.begin(),mymap.begin(),mymap.end());BR
evilissimo
-
Ich glaub ich bin zu blöd

Ich hab das exakt so übernommen und den Vector gegen einen leeren Vector bei mir ausgetauscht und eine ganz normale map<string, MyClass> angegeben.
**
xutility(2228) : error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::pair<_Ty1,_Ty2>' akzeptiert (oder keine geeignete Konvertierung möglich)Sowie
Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
**Ich weiß nicht was damit gemeint ist?
-
=>
std::map<int,std::string> mymap; std::vector<std::pair<int,std::string> > myvec; myvec.insert(myvec.begin(), mymap.begin(), mymap.end());
-
war das nicht so, dass map den key als const T im pair ablegt? dann könnte es probleme geben, denn ein pair<const T,U> ist ja nicht in ein pair<T,U> (mit T non-const) konvertierbar (oder doch?). dann evtl. sowas:
std::map<int,std::string> mymap; std::vector<std::pair<int,std::string> > myvec; std::pair<int,std::string> m2v(const std::pair<const int,std::string>& p) { return std::pair<int,std::string>( p.first, p.second ); } std::transform( mymap.begin(), mymap.end(), std::inserter( myvec.begin() ), m2v );kann auch sein, dass ich völlig falsch liege.
-
camper schrieb:
war das nicht so, dass map den key als const T im pair ablegt? dann könnte es probleme geben, denn ein pair<const T,U> ist ja nicht in ein pair<T,U> (mit T non-const) konvertierbar (oder doch?).
Doch ist kopierbar. Es gibt einen "Copy-"Konstruktor der implizierte Konvertierung zulässt:
template< typename FirstType , typename SecondType > template< typename OtherFirstType , typename OtherSecondType > pair<FirstType,SecondType>::pair( pair<OtherFirstType,OtherSecondType> const & ){ ...
-
evilissimo schrieb:
camper schrieb:
war das nicht so, dass map den key als const T im pair ablegt? dann könnte es probleme geben, denn ein pair<const T,U> ist ja nicht in ein pair<T,U> (mit T non-const) konvertierbar (oder doch?).
Doch ist kopierbar. Es gibt einen "Copy-"Konstruktor der implizierte Konvertierung zulässt:
template< typename FirstType , typename SecondType > template< typename OtherFirstType , typename OtherSecondType > pair<FirstType,SecondType>::pair( pair<OtherFirstType,OtherSecondType> const & ){ ...ok. dann liegt der fehler woanders.
-
Ich empfehle die Verwendung von typedef und den typedefs der Container.
typedef std::map<int,std::string> mymap_type; mymap_type mymap; std::vector<mymap_type::value_type> myvec_type; myvec_type myvec; myvec.insert(myvec.begin(), mymap.begin(), mymap.end());So kann nichts mehr schief gehen. Da brauchst Du Dir keine Gedanken mehr über std::pair und const und wie viele spitze Klammern und wo Leerzeichen zu machen. (Alle Probleme der Welt sind für immer gelöst
)Tommi
-
tntnet schrieb:
Ich empfehle die Verwendung von typedef und den typedefs der Container.
typedef std::map<int,std::string> mymap_type; mymap_type mymap; std::vector<mymap_type::value_type> myvec_type; myvec_type myvec; myvec.insert(myvec.begin(), mymap.begin(), mymap.end());So kann nichts mehr schief gehen. Da brauchst Du Dir keine Gedanken mehr über std::pair und const und wie viele spitze Klammern und wo Leerzeichen zu machen. (Alle Probleme der Welt sind für immer gelöst
)Tommi
wäre schön gewesen, dummerweise bist du jetzt tatsächlich in die const falle getappt. mymap_type::value_type erfüllt die container bedingungen nicht (CopyAssignable).
