遍历对列表的向量
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";
我正在尝试迭代一个对列表的向量,但我不断收到编译错误。我正在尝试为该对的第一个元素找到匹配项。
这是 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";