遍历对列表的向量

Iterate over a vector of a list of pairs

我正在尝试迭代一个对列表的向量,但我不断收到编译错误。我正在尝试为该对的第一个元素找到匹配项。

这是 cpp shell 上的代码:http://cpp.sh/4ir4p

这是代码:

// Example program
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <utility>
using namespace std;

int main()
{
    vector < list < pair <string, string> > > v;
    v.resize(15);
    string k = "foo";

    //want to try and find match
    for (size_t i = 0; i < v.size(); i++)
        if(v[i].first == k)
            cout << "true";

    for (const auto & itr : v)
        if(itr.first == k)
            cout << "true";

    cout << "YAY";
}

这两种方法都出现错误,说我没有首先命名的成员,我不太确定我做错了什么,感谢您的帮助。

行中

vector < list < pair <string, string> > > v;

你定义了一个vector<list<pair>>,所以后面的v[i]是一个list,而不是一对。难道你只需要 vector<pair> 吗?

当然会出现编译错误,std::vector 没有名为 first 的成员。当您遍历向量时,您的迭代器指向一个对列表,您想要进行比较。所以你需要第二个循环:

int main()
{
   vector < list < pair <string, string> > > v;
   v.resize(15);
   string k = "foo";

   for (const auto &itList : v)
   {
      for (const auto &itPair : itList)
      {
         if (itPair.first == k)
         {
            cout << "true";
         }
      }
   }
}

您必须为列表引入第二个循环,例如:

//want to try and find match
    for (size_t i = 0; i < v.size(); i++)
        for (auto itr=v[i].begin(); itr != v[i].end(); itr++)
            if(itr->first == k)
            cout << "true";