c ++:通过多个向量迭代

use*_*598 2 c++ iterator vector multiset

我试图从多个向量中打印出每个向量中的所有元素.构建失败但错误发生在头文件中的某个地方,恐怕我根本不理解错误代码.任何帮助将不胜感激!这是错误:

error: invalid conversion from 'const std::basic_string<char, std::char_traits<char>, std::allocator<char> >* const' to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >*'
Run Code Online (Sandbox Code Playgroud)

以下是导致问题的代码.

multiset<vector < string > > setOfRules;
vector<string> testing,testing2;

testing.push_back("bar");
testing.push_back("foo");
testing2.push_back("foo2");
testing2.push_back("bar2");
setOfRules.insert(testing);
setOfRules.insert(testing2);

for (multiset< vector <string > >::iterator myIterator = setOfRules.begin();
     myIterator!=setOfRules.end(); 
     ++myIterator) 
{

    for (vector< string >::iterator myOtherIterator = ( *myIterator ).begin(); 
         myOtherIterator != ( *myIterator ).end(); 
         ++myOtherIterator) 
    {
        cout << *myOtherIterator << " " ;
    }
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

Ros*_*ost 6

C++ 11 Standard声称,对于值类型与键类型相同的关联容器,iterator和const_iterator都是常量迭代器.

实际上multiset<vector<string>>::iteratorconst_iterator.与std::set迭代器相同的技巧- 它们都是有效的.

这意味着vector<string>::iterator myOtherIterator = *myIterator.begin()语句将失败,因为您尝试从const对象获取非const迭代器(由哪个给出).*myIteratorconst

要修复你需要使用vector<string>::const_iterator:

for(multiset<vector<string>>::const_iterator myIterator = setOfRules.begin(); 
    myIterator != setOfRules.end(); ++myIterator)
{
   for(vector<string>::const_iterator myOtherIterator = *myIterator.begin();     
      myOtherIterator != *myIterator.end(); ++myOtherIterator)
   {
      cout << *myOtherIterator << " ";
   }
   cout << endl;
}
Run Code Online (Sandbox Code Playgroud)