Tôi đã chương trình sau đây được biên soạn tại biên dịch khác nhau, và nhận được hành vi khác nhau,hành vi khác nhau unordered_multimap trong gnu ++ 11 và C++ 0x
Nguồn:
#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 ;
}
Biên soạn trong g ++ 4.4.6 trong RedHat Linux thích:
g++ --std=c++0x unordered_map1.cpp -o unordered_map1.exe
sẽ nhận được câu trả lời đúng cho myMap và mymultimap, nhưng trong MinGW: http://sourceforge.net/projects/mingwbuilds/?source=dlp
Biên dịch nó như sau:
g++ -std=gnu++11 unordered_map1.cpp -o unordered_map1.exe
Lần này, myMap vẫn nhận được câu trả lời đúng, nhưng mymultimap đều các MinGW g ++ phiên bản trống rỗng, là
g ++ (REV1, Được xây dựng bởi MinGW- xây dựng dự án) 4.8.1
Tôi rất thú vị trong C++ 11 vì vậy tôi tải xuống trình biên dịch MinGw trong winx, g ++ 4.4.6, trình biên dịch phát triển của tôi, không thể biên dịch C++ 11 để kiểm tra.
Những gì tôi đã bỏ lỡ? mục tiêu của tôi là thử nghiệm C++ 11, Bất kỳ đề xuất được đánh giá cao !!
Edit:
mymultimap.insert(mypair[idx]) ; //won't work !!
mymultimap.insert(make_pair(s1,s2)) ; //This work !!
Sau khi tôi thay đổi mã của tôi để make_pair, nó hoạt động trong MinGW và in câu trả lời đúng cho mymultimap .... đó là xa lạ với tôi mặc dù ~~
không có thông báo lỗi, OP nói Multimap trống khi sử dụng mã của mình với MinGW –
@barfatchen (1) Với gnu ++ 11 bạn cũng cho phép mở rộng gnu , xem [Sự khác biệt giữa -std = C++ 11 và -std = gnu ++ 11 là gì?] (http://stackoverflow.com/q/10613126/341970) (2) Tại một số điểm trong quy trình chuẩn hóa 'cặp' bị hỏng, tôi không nhớ chi tiết chính xác. Những gì bạn thấy có thể liên quan đến điều đó. Vâng, không ai trong số những điều này giúp bạn nhưng chúng ta hãy hy vọng ai đó có thể trả lời câu hỏi của bạn. – Ali