在结构向量中搜索特定ID的有效方法

Efficient way to search a vector of structs for a specific ID?

本文关键字:ID 有效 方法 结构 向量 搜索      更新时间:2023-10-16

我有一个结构向量Data,它有一个整数数据成员ID。我需要搜索它是否包含特定ID的实例。我必须这样做:

int DataSize = 0;
for(unsigned count = 0; count < Data.size(); count++)
{
    if(ID == Data[count].ID)
        DataSize++;
}

其中ID是先前定义的。有没有更有效的方法来搜索对象向量?尤其是当它是嵌入式应用程序的一部分时。

使用std::count_if

std::count_if(Data.begin(), Data.end(), [&ID](const DataType& data){return ID == data.ID; };

其中CCD_ 5是包含在CCD_ 6中的元素的类型。

注意,除非Data满足更多的条件,例如按ID排序,否则没有实际的效率增益。但是,使用标准算法可以提高可读性。

使用C++11和lambdas可以写得更明确一点:

如果要计数ID为的结构

std::count_if(std::cbegin(dataArray), std::cend(dataArray), [ID](const Data& data) {
    return data.ID == ID;
});

如果你想知道是否至少有一个:

bool found_ID = std::cend(dataArray) != std::find_if(std::cbegin(dataArray), std::cend(dataArray), [ID](const Data& data) {
    return data.ID == ID;
});

STD的其他算法手头总是很好,有些算法只使用很少的时间,但如果手动实现,可以节省大量调试(边缘情况)和性能问题。