我试图分别用字符串和向量作为键和值来显示多图的内容。当我试图取消向量的内容(multimap中的值)时,我遇到了问题。到目前为止我所做的是:
multimap<string, vector<string> > someMultimap;
vector<string> someVector;
someVector.push_back("test");
someMultimap.insert(pair<string, vector<string> >("KEY", someVector));
//So for it works fine...
multimap <string, vector<string> >::iterator it;
for (it = someMultimap.begin(); it != someMultimap.end(); ++it)
{
cout << it->first << endl << endl << it->second << endl << endl;
^^^^^^^^^^
this is the problem, can´t do this with a vector(?)
}
有没有人有解决问题的建议?
答案 0 :(得分:3)
您可以为矢量添加第二个循环。
multimap <string, vector<string> >::const_iterator it;
for (it = someMultimap.begin(); it != someMultimap.end(); ++it)
{
cout << it->first << endl ;
vector<string>::const_iterator itVec;
for (itVec = it->second.begin(); itVec != it->second.end(); ++itVec)
{
cout << *itVec <<" ";
}
cout<<endl;
}
如果您不打算修改任何值,您可以制作迭代器const
答案 1 :(得分:2)
使用std::copy
使用单个函数输出向量的内容:
#include <iterator>
#include <algorithm>
#include <iostream>
//..
using namespace std;
for (it = someMultimap.begin(); it != someMultimap.end(); ++it)
{
cout << it->first << "\n\n";
copy(it->second.begin(), it->second.end(), ostream_iterator<string>(cout, " "));
cout << "\n\n";
}
答案 2 :(得分:1)
遍历矢量并打印:
cout << it->first << endl << endl;
for (vector<string>::iterator j(it->second.begin()); j != it->second.end(); ++j)
cout << *j << " ";
cout << endl << endl;
另外,请勿使用std::endl
,它会在每次通话时刷新,这可能会影响性能。
答案 3 :(得分:1)
那么,您可以定义将std::vector
发送到std::ostream
的含义
以下是一种实现方法的示例:
template<typename T>
std::ostream& operator <<(std::ostream& stream, std::vector<T> const& v) {
for (auto&& e : v) {
stream << e << ' ';
}
return stream;
}