我如何显示这张名为index的地图的内容?
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
中的错误,因为它引用了vector,但我无法解决这个问题。
答案 0 :(得分:0)
(*it).second
本身没有任何意义。您需要使用向量公共接口从中提取数据(在vector
文档中查看)或执行您需要的任何操作。
答案 1 :(得分:0)
而不是map<string, vector<pair<string, int> > index;
,我至少考虑从multimap<string, pair<string, int> > index;
开始。两者基本上完成相同的事情:一个任意数量的pair<string, int>
与一个键相关联(在这种情况下是一个字符串)。
要显示它,我首先要为容器中的类型重载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;
}
但是map或multimap的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 <<
的其他重载。