从对象向量中搜索变量

Search for a variable from vector of objects

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().

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

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

但是使用 std::string::compare() 函数有它自己的好处。
我们不仅可以比较两个字符串,还可以检查一个是小于还是大于。

std::string::compare() 函数 return 一个 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
    }
}

简单,可读,从:

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

现在 found 是第一个匹配元素的迭代器,或者 vec.end() 如果找到 none。

你也可以在某些情况下使用基于范围的for循环,让你的代码更清晰。

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

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