Search a vector of objects by object attribute(按对象属性搜索对象向量)
问题描述
我试图找出一种在向量中查找某个对象的索引的好方法 - 通过将字符串与对象中的成员字段进行比较.
I'm trying to figure out a nice way to find the index of a certain object in a vector - by comparing a string to a member field in the object.
像这样:
find(vector.begin(), vector.end(), [object where obj.getName() == myString])
我搜索没有成功 - 也许我不完全明白要寻找什么.
I have searched without success - maybe I don't fully understand what to look for.
推荐答案
您可以使用 std::find_if
带有合适的函子.在此示例中,使用了 C++11 lambda:
You can use std::find_if
with a suitable functor. In this example, a C++11 lambda is used:
std::vector<Type> v = ....;
std::string myString = ....;
auto it = find_if(v.begin(), v.end(), [&myString](const Type& obj) {return obj.getName() == myString;})
if (it != v.end())
{
// found element. it is an iterator to the first matching element.
// if you really need the index, you can also get it:
auto index = std::distance(v.begin(), it);
}
如果您没有 C++11 lambda 支持,函子可以工作:
If you have no C++11 lambda support, a functor would work:
struct MatchString
{
MatchString(const std::string& s) : s_(s) {}
bool operator()(const Type& obj) const
{
return obj.getName() == s_;
}
private:
const std::string& s_;
};
这里,MatchString
是一种类型,它的实例可以用单个 Type
对象调用,并返回一个布尔值.例如,
Here, MatchString
is a type whose instances are callable with a single Type
object, and return a boolean. For example,
Type t("Foo"); // assume this means t.getName() is "Foo"
MatchString m("Foo");
bool b = m(t); // b is true
然后你可以将一个实例传递给 std::find
then you can pass an instance to std::find
std::vector<Type>::iterator it = find_if(v.begin(), v.end(), MatchString(myString));
这篇关于按对象属性搜索对象向量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:按对象属性搜索对象向量
基础教程推荐
- Windows Media Foundation 录制音频 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- 从 std::cin 读取密码 2021-01-01