2017-01-16 22 views
4

unordered_mapに3つの要素があります。私は、次のコード3つの要素を持つ順序付けされていないマップ

#include <iostream> 
#include <string> 
#include <algorithm> 
#include <boost/unordered_map.hpp> 

typedef boost::unordered_map<int, std::pair<int, int>> mymap; 
mymap m; 

int main(){ 
//std::unordered_map<int, std::pair<int, int> > m; 
m.insert({3, std::make_pair(1,1)}); 
m.insert({4, std::make_pair(5,1)}); 
for (auto& x: m) 
    std::cout << x.first << ": "<< x.second << std::endl; 

} 

を試してみましたが、私は

'のstd ::ペアが' constのはstd :: __ cxx11 ::のbasic_string < _CharT」に由来していないようなprint文を何かに多くのエラーを取得します、_Traits、_Alloc>」 のstd :: coutを< < < < x.first ":" < < x.second < <のstd ::てendl;

+1

構造を作成してペアの代わりに追加してみませんか?私はコードがより読みやすくなると思います。 –

+0

これは問題が発生しているためです。 m.insert(3、std :: make_pair(1,1));でなければなりません。 Without {} –

+0

タイトルには「順序付けられていないマップが3つの要素を持つ」と書かれています。私はコード内に2つの要素しか見ません。または、整数を一対の整数にマップするマップに3つのintを持つ値型があることを意味しますか? –

答えて

6

印刷に関する声明の問題。

std::cout << x.first << ": "<< x.second.first << ","<< x.second.second << std::endl; 
_______________________________^^^^^^^^^^^^^^__________^^^^^^^^^^^^^^^_______________ 

std::pairを直接印刷することはできません。各項目を個別に印刷する必要があります。

std::pairの場合、ostream& operator<<のオーバーロードはありませんが、intの場合は1つあります。

+0

する必要があります: "** no **' ostream&operator << 'overload ..." –

+0

@MartinBonnerありがとう..編集済み –

関連する問題