0

インデックスと呼ばれるこのマップの内容を表示するにはどうすればよいですか?

map< string, vector< pair<string, int> > > index

私はイテレーターを作成し、次のコードを使用してマップの先頭に作成しました。

map< string, vector< pair<string, int> > >::iterator it;
it = index.begin(); 

...そしてこれをforループを使用してマップの内容を表示しますが、エラーが発生します:

for ( it =index.begin() ; it != index.end(); it++ )
    cout << (*it).first <<(*it).second <<endl;

ベクトルを参照しているため、エラーが発生することはわかっていますが、(*it).secondこの問題を解決することはできません。

4

2 に答える 2

0

(*it).secondこの文脈では、それ自体では意味がありません。ベクトルパブリックインターフェイスを使用して、そこからデータを抽出するvectorか(ドキュメントで参照)、必要な操作を行う必要があります。

于 2012-12-15T18:44:40.937 に答える
0

の代わりに、map<string, vector<pair<string, int> > index;少なくとも。から始めることを検討しmultimap<string, pair<string, int> > index;ます。pair<string, int>どちらも本質的に同じことを実現します。1つのキー(この場合は文字列)に関連付けられた任意の数です。

それを表示するために、私operator<<はコンテナ内の型のオーバーロードから始めます:

// the type of the data being stored:
typedef pair<string, int> data_t;

// an overload for that:
ostream &operator<<(ostream &os, data_t> const &d) { 
    return os << d.first << d.second;
}

ただし、マップまたはマルチマップのvalue_typeは、キーと関連データのペアであるため、そのためのオーバーロードも提供する必要があります。

ostream &operator<<(ostream &os, pair<string, data_t> const &d) {
    return os << d.first << d.second;
}

次にstd::copy、データをストリームにコピーするために使用します。

copy(index.begin(), index.end(), ostream_iterator<data_t>(cout, "\n"));

つまり、マップ内のオブジェクトごとに、基本的には実行されますcout << object[i]。これにより、キーと関連データが出力されます。関連するデータ自体はpair<string, int>、であるため、他のオーバーロードとともに出力されますoperator <<

于 2012-12-15T18:45:29.177 に答える