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

时间:2015-02-19 19:19:17

标签: c++ search vector

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

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

之前定义ID的位置。有没有更有效的方法来搜索对象的向量?特别是当它是嵌入式应用程序的一部分时。

2 个答案:

答案 0 :(得分:1)

使用std::count_if

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

其中DataTypeData中包含的元素类型。

请注意,除非Data满足更多条件,例如按ID排序,否则不会有真正的效率提升。但是,使用标准算法可提高可读性。

答案 1 :(得分:1)

使用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;
});

The other algorithms of the STD手头总是好的,有些只使用很少的时间,但如果手工实施,可以节省大量的调试(边缘情况)和性能问题。