从对象向量中搜索变量
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;
}
}
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;
}
}