在向量中找到一个值,而这个值又存在于一个结构中

时间:2017-02-12 10:09:32

标签: c++ string vector struct

Finding an element in a vector of structures

此链接向我展示了如何在结构中查找值。

但我有这样的事情,

struct sample {
    string name;
    vector<string> values;
};
vector<sample>v1;

这是一个结构向量。如何搜索结构样本中存在的值向量中的特定字符串?它本身就是结构的载体?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以遍历包含sample结构的向量v1,以访问每个向量v1成员作为结构。然后,您可以访问struct成员向量以搜索所需的字符串:

for (const sample &it : v1) {
    for (const string &st : it.values) {
        if (st == ...) {
        }
    } 
}

答案 1 :(得分:0)

您可以使用std::find_ifstd::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