Ho il seguente programma compilato a diversi compilatore, e ottenere un comportamento diverso,comportamento diverso unordered_multimap in GNU ++ C++ 0x 11 e
Fonte:
#include <iostream>
#include <sstream>
#include <unordered_map>
using namespace std ;
std::unordered_map<std::string,std::string> mymap;
std::unordered_multimap<std::string,std::string> mymultimap;
int main()
{
DoAddItem() ;
std::cout << "mymap contains:";
for (auto it = mymap.begin(); it != mymap.end(); ++it)
std::cout << " " << it->first << ":" << it->second;
std::cout << std::endl;
std::cout << "============================================" << std::endl ;
std::cout << "mymultimap contains:";
for (auto it2 = mymultimap.begin(); it2 != mymultimap.end(); ++it2)
std::cout << " " << it2->first << ":" << it2->second;
std::cout << std::endl;
return 0;
}
void DoAddItem()
{
std::pair<std::string,std::string> mypair[100];
int idx ;
std::string s1 ;
std::string s2 ;
for(idx=0;idx<10;idx++)
{
s1 = string("key") + int2str(idx) ;
s2 = string("val") + int2str(idx) ;
mypair[idx] = {s1,s2} ;
mymap.insert(mypair[idx]) ;
mymultimap.insert(mypair[idx]) ;
}//for
return ;
}
Compilato in g ++ 4.4.6 in RedHat Linux piace:
g++ --std=c++0x unordered_map1.cpp -o unordered_map1.exe
otterrà la risposta giusta per mymap e mymultimap, ma in MinGW: http://sourceforge.net/projects/mingwbuilds/?source=dlp
compilarlo come il seguente:
g++ -std=gnu++11 unordered_map1.cpp -o unordered_map1.exe
Questa volta, mymap ancora ottenere la risposta giusta, ma mymultimap sono tutti la MinGW g versione vuota, ++ è
g ++ (rev1, Costruito da MinGW- builds project) 4.8.1
Sono interessante in C++ 11 quindi scaricare il compilatore MinGw nella mia winx, g ++ 4.4.6, il mio compilatore di sviluppo, non è in grado di compilare C++ 11 per il test.
Cosa mi sono perso? il mio obiettivo è testare C++ 11, ogni suggerimento è apprezzato !!
Edit:
mymultimap.insert(mypair[idx]) ; //won't work !!
mymultimap.insert(make_pair(s1,s2)) ; //This work !!
Dopo cambio il mio codice per make_pair, funziona in MinGW e stampare la risposta giusta per mymultimap .... che è strano per me anche se ~~
non c'è alcun messaggio di errore, OP afferma multimappa è vuoto quando si utilizza il suo codice con MinGW –
@barfatchen (1) con GNU ++ 11 si attiva anche estensioni GNU , vedi [Quali sono le differenze tra -std = C++ 11 e -std = gnu ++ 11?] (http://stackoverflow.com/q/10613126/341970) (2) Ad un certo punto durante la procedura di standardizzazione 'pair' era rotto, non ricordo i dettagli esatti. Ciò che vedi potrebbe essere collegato a questo. Bene, nessuna di queste cose ti aiuta ma speriamo che qualcuno possa rispondere alla tua domanda. – Ali