从对象矢量中搜索变量

时间:2017-12-22 12:00:35

标签: c++ vector stl-algorithm

struct ABC
{
int a;
string b;
};

我有一个上述结构的对象向量。并希望基于变量“b”搜索向量?

我的逻辑如下。

vector<ABC> vec = ...;//vec has my objects
for(vector<ABC>::iterator it = vec.begin();
        it != vec.end();
        ++it)
    {
        if(search_str == (it->b))//search string is my string which i need to search
        {
        }
    }

我已经对上面的代码进行了广泛测试,但它确实有效。我想知道是否有更好的方法来实现这一目标。也许使用find()。

3 个答案:

答案 0 :(得分:3)

简单易读,取自Sam's comment

auto found = std::find_if(vec.begin(), vec.end(), [&](auto const &e) {
    return e.b == search_str;
});

现在found是第一个匹配元素的迭代器,如果没有找到,则vec.end()

答案 1 :(得分:0)

在某些情况下,您还可以使用基于范围的for循环,为您提供更清晰的代码。

for (auto const &p : vec)
{
    if (p == search_str)
    {
        //--- Handle the find ---//

        //if you want to stop...
        break; 
    }
}

答案 2 :(得分:-1)

比较两个字符串的更好方法之一是在C ++中使用compare方法。

假设您要比较两个字符串S1和S2。
您可以使用已经使用的equality operator( == )

但使用std::string::compare()功能有其自身的好处 我们不仅可以比较两个字符串,还可以检查一个字符串是否更少。

std::string::compare()函数返回int

    如果S1等于S2,则
  • 零。
  • 如果S1小于S2
  • 小于零。
  • 如果S1大于S2
  • 大于零。

因此您的代码可以格式化为:

vector<ABC> vec = ...;//vec has my objects
for(vector<ABC>::iterator it = vec.begin(); it != vec.end(); ++it){
    if(!search_str.compare(it->b))
    {
      //match found
    }
}