首页 > 解决方案 > 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

标签: c++vector

解决方案


因为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)))


推荐阅读