打印multimap <string,vector <string =“”>&gt;?</string,>

时间:2014-12-22 21:58:10

标签: c++ vector multimap

我试图分别用字符串和向量作为键和值来显示多图的内容。当我试图取消向量的内容(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(?)
    }

有没有人有解决问题的建议?

4 个答案:

答案 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;
}