Finding an element in a vector of structures
此链接向我展示了如何在结构中查找值。
但我有这样的事情,
struct sample {
string name;
vector<string> values;
};
vector<sample>v1;
这是一个结构向量。如何搜索结构样本中存在的值向量中的特定字符串?它本身就是结构的载体?
感谢。
答案 0 :(得分:1)
您可以遍历包含sample
结构的向量v1,以访问每个向量v1成员作为结构。然后,您可以访问struct成员向量以搜索所需的字符串:
for (const sample &it : v1) {
for (const string &st : it.values) {
if (st == ...) {
}
}
}
答案 1 :(得分:0)
您可以使用std::find_if
和std::find
的组合。
std::find_if
遍历sample
个对象并使用谓词检查每个元素,谓词本身使用std::find
来遍历内部的所有std::string
元素,并将每个元素与每个元素进行比较你要找的代币。
以下是一个示例,使用lambda函数创建谓词:
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>
struct sample
{
std::string name;
std::vector<std::string> values;
};
int main()
{
std::vector<sample> const v1 =
{
{ "one", { "a", "b" } },
{ "two", { "c", "token to find", "d", "e" } },
{ "three", { "f"} }
};
using std::begin;
using std::end;
auto const token = "token to find";
// go through all samples
auto const sample_iter = std::find_if(begin(v1), end(v1), [&token](sample const& s)
{
// in each sample, go through all values
auto const string_iter = std::find(begin(s.values), end(s.values), token);
return string_iter != end(s.values);
});
if (sample_iter == end(v1))
{
std::cout << "not found\n";
}
else
{
std::cout << sample_iter->name << '\n';
}
}
输出:
two