c++ - C ++在向量中查找特定元素
问题描述
我有一个像下面这样的向量。
struct Personel {
uint16_t personelId;
uint8_t age;
}
std::vector<Personel> Personels;
想象一下添加 1000 个元素,如下所示。
Personel personel1;
personel1.personelId = 1;
personel1.age = 26;
Personels.push_back(personel1);
.
.
.
Personel personel1000;
personel1000.personelId = 1000;
personel1000.age = 42;
Personels.push_back(personel1000);
从代码中可以理解,personelId
将是唯一的。如果不使用 for 迭代每个元素并进行比较,我如何根据.personelId
下面的代码不起作用:因为int
不是Personel
auto match = std::find(Personels.begin(), Personels.end(), 596);
int index = std::distance(Personels.begin(), match); //must return 596
解决方案
因为find
您需要传递与向量值相同类型的值。其中一种方法是为 Personel 定义 oprator==,使用目标 ID 创建个人并使用 find。另一种是将 find_if 与 lambda 一起使用:
auto match = std::find_if(Personels.begin(), Personels.end(), [] (const Personel& v) {return v.personelId == 596});
int index = std::distance(Personels.begin(), match);
或者,您可以使用旧的好for
)))
推荐阅读
- c# - 如何从 .xsd 文件中获取表
- python - 如何使用 `argparse` 从命令行和代码传递参数?
- java - 当 domain.xml 中的验证为真时,MySQLNonTransientConnectionException/CommunicationsException?
- java - 无法通过 Skype 机器人创建新对话
- android - 为什么 Windows 的 worldtoscreen() 输出正确而 Android 输出错误
- typo3 - TYPO3 Support Times:“扩展支持”到底是什么意思?
- ios - 具有多个部分的 UITableView 和具有单个单元格选择和多个单元格选择的自定义部分标题
- javascript - 如何显示 AJAX 调用对 Spring 控制器方法的响应?
- android - Android Pie 无法接收百度推送通知
- r - 计算组的百分比