C++ 查找并更新C++;11结构向量

C++ 查找并更新C++;11结构向量,c++,c++11,vector,struct,C++,C++11,Vector,Struct,我有一个结构向量,如下所示 struct myStruct{ size_t aID; int bID; double tobeUpdated; }; std::vector<myStruct> myVec; struct myStruct{ 尺寸辅助; 国际招标; 双重更新; }; std::载体myVec; 如何在C++11中高效地查找和更新满足aID==someId&&bID==otherID的myVec成员?如果您想提高效率,这实际上取决于您对结构

我有一个结构向量,如下所示

struct myStruct{
    size_t aID;
    int bID;
    double tobeUpdated;
};

std::vector<myStruct> myVec;
struct myStruct{
尺寸辅助;
国际招标;
双重更新;
};
std::载体myVec;

如何在C++11中高效地查找和更新满足
aID==someId&&bID==otherID
myVec
成员?

如果您想提高效率,这实际上取决于您对
结构和数组的使用。如果基于您使用它的方式可能,那么我会将它们存储在
std::map
中。这将允许基于ID或可能的ID组合轻松查找。然而,如果它实际上并没有显著降低系统的速度,那么我会说放弃优化,只需通过该测试迭代每个索引

如果您想提高效率,这实际上取决于您对
结构和数组的使用。如果基于您使用它的方式可能,那么我会将它们存储在
std::map
中。这将允许基于ID或可能的ID组合轻松查找。然而,如果它实际上并没有显著降低系统的速度,那么我会说放弃优化,只需通过该测试迭代每个索引

假定只更新一个

// what to search for
size_t aID = 5;
int bID = 7;

find_if(vec.begin(), vec.end(), [aID, bID](const myStruct& obj) { return obj.aID == aID && obj.bID == bID; });

假设只有一个要更新

// what to search for
size_t aID = 5;
int bID = 7;

find_if(vec.begin(), vec.end(), [aID, bID](const myStruct& obj) { return obj.aID == aID && obj.bID == bID; });

向量排序了吗?你可能陷入了线性搜索。你想更新多少元素?最多一个?或者可以有多个元素?最多有一个元素需要更新。向量是否已排序?您可能陷入了线性搜索。您希望更新多少个元素?最多一个?或者可以有多个?最多有一个元素需要更新。@polerto No它向对象返回一个迭代器,您可以使用它来更新它,如果找不到对象,则返回结束迭代器。它不返回我正在搜索的元素的“副本”吗?因此,如果我更新返回的迭代器,它不会只更新副本而不更新向量本身中的元素吗?@polerto不,您需要了解更多关于STL的信息。迭代器就像一个指针。@polerto No它向对象返回一个迭代器,您可以用它来更新它,如果找不到对象,则返回结束迭代器。它不是返回我正在搜索的元素的“副本”吗?因此,如果我更新返回的迭代器,它不会只更新副本而不更新向量本身中的元素吗?@polerto不,您需要了解更多关于STL的信息。迭代器就像一个指针。