显示地图的内容

时间:2012-12-15 01:06:25

标签: visual-c++

我如何显示这张名为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,但我无法解决这个问题。

2 个答案:

答案 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 <<的其他重载。