我使用此向量:vector<string, vector<int>>
。
我认为第一次迭代返回一个数组:
for (vector<string, vector<int>>::iterator it = sth.begin(); it != sth.end(); ++it) {
// how do I get the string?
// I tried (*it)[0], but that did not work
}
另外,我如何push_back
这个向量?通过vector<string, vector<int>()>()
对我不起作用。感谢
答案 0 :(得分:5)
vector take:
vector<int>
不是字符串的有效分配器。
假设您不想在此处使用地图,您可能需要:
vector< pair<string, vector<int> > > outerVec;
vector<int> vecInt1, vecInt2;
vecInt1.push_back( 1 );
vecInt1.push_back( 5 );
vecInt2.push_back( 147 );
outerVec.push_back( std::make_pair( std::string("Hello World"), vecInt1 ) );
outerVec.push_back( std::make_pair( std::string("Goodbye Cruel World"), vecInt2 ));
如果我们输入dede:
typedef std::vector<int> inner_vectype;
typedef std::pair< std::string, inner_vectype > pair_type;
typedef std::vector< std::pair > outer_vectype;
现在迭代:
for( outer_vectype::const_iterator iter = outerVec.begin(),
iterEnd = outerVec.end();
iter != iterEnd; ++iter )
{
const pair_type & val = *iter;
std::cout << val.first;
for( inner_vectype::const_iterator inIter = val.second.begin(),
inIterEnd = val.second.end(); inIter != inIterEnd; ++inIter )
{
std::cout << '\t' << *inIter;
}
std::cout << '\n';
}
希望输出如下内容:
Hello World 1 5
Goodbye Cruel World 147