在结构向量中搜索特定ID的有效方法
Efficient way to search a vector of structs for a specific ID?
我有一个结构向量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的其他算法手头总是很好,有些算法只使用很少的时间,但如果手动实现,可以节省大量调试(边缘情况)和性能问题。
相关文章:
- 欧拉项目#8答案是大以获得有效答案
- 调整大小后指向元素值的指针unordered_map有效?
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- GCC对可能有效的代码抛出init list生存期警告
- 有效地使用std::unordered_map来插入或增加键的值
- c++中O(n^(1/3))中一个数的除数的有效计数
- 使用无符号字符数组有效存储内存
- 自定义先决条件对移动分配运算符有效吗
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- FFMPEG配置文件级别id大小无效
- DCMTK 了解"DIMSE 没有有效的演示上下文 ID"错误
- 一种有效的数据结构,用于按 ID 访问和查找加权随机项
- 在结构向量中搜索特定ID的有效方法
- 在 c++ 中通过 int id 跟踪少量结构类型的有效方法是什么
- 在C++03中,在未赋值的上下文中使用表示非静态数据成员的id表达式有效吗
- 生成类唯一id的有效方法
- 如何在Symbian应用程序中检查有效的联系人ID