我有一个结构Data
的向量,它有一个整数数据成员ID
。我需要搜索它是否包含特定ID的实例。我不得不这样做:
int DataSize = 0;
for(unsigned count = 0; count < Data.size(); count++)
{
if(ID == Data[count].ID)
DataSize++;
}
之前定义ID
的位置。有没有更有效的方法来搜索对象的向量?特别是当它是嵌入式应用程序的一部分时。
答案 0 :(得分:1)
std::count_if(Data.begin(), Data.end(), [&ID](const DataType& data){return ID == data.ID; };
其中DataType
是Data
中包含的元素类型。
请注意,除非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手头总是好的,有些只使用很少的时间,但如果手工实施,可以节省大量的调试(边缘情况)和性能问题。