次のプログラムを別のコンパイラでコンパイルしましたが、動作が異なります。
ソース :
#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 ;
}
RedHat Linux の g++ 4.4.6 でコンパイル:
g++ --std=c++0x unordered_map1.cpp -o unordered_map1.exe
mymap と mymultimap の正しい答えが得られますが、MinGw では: http://sourceforge.net/projects/mingwbuilds/?source=dlp
次のようにコンパイルします。
g++ -std=gnu++11 unordered_map1.cpp -o unordered_map1.exe
今回は、mymap はまだ正しい答えを取得しますが、mymultimap はすべて空です。MinGw g++ バージョンは
g++ (rev1、MinGW-builds プロジェクトによってビルド) 4.8.1
私は c++11 に興味があるので、Winx で MinGw コンパイラをダウンロードします。私の開発コンパイラである g++ 4.4.6 は、テスト用に c++11 をコンパイルできません。
私が逃したものは何ですか?私の目標は c++11 をテストすることです。どんな提案でも大歓迎です!!
編集 :
mymultimap.insert(mypair[idx]) ; //won't work !!
mymultimap.insert(make_pair(s1,s2)) ; //This work !!
コードを make_pair に変更した後、MinGw で動作し、mymultimap の正しい答えを出力します ....それは私には奇妙ですが ~~