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()。
答案 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
}
}