【问题标题】:Find and update an element in C++11 vector of structs在 C++11 结构向量中查找和更新元素
【发布时间】:2013-08-08 16:09:45
【问题描述】:

我有一个结构向量如下

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

std::vector<myStruct> myVec;

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

【问题讨论】:

  • 向量排序了吗?
  • 好吧,你可能被线性搜索困住了。
  • 您要更新多少个元素?最多一个?还是不止一个?
  • 最多有一个元素需要更新。

标签: c++ c++11 vector struct


【解决方案1】:

假设只有一个要更新。

// 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 不,它返回一个指向对象的迭代器,您可以使用它来更新它,或者如果找不到对象,则返回结束迭代器。
  • 它不会返回我正在搜索的元素的“副本”吗?那么如果我更新返回的迭代器,它不会只更新副本而不更新向量本身的元素吗?
  • @polerto 不,您需要了解有关 STL 的更多信息。迭代器就像一个指针。
【解决方案2】:

如果你想让它更高效,这真的取决于你对struct 和数组的使用。如果可能根据您的使用方式,那么我会将它们存储在std::map 中。这将允许基于 ID 或可能的 ID 组合轻松查找。但是,如果它实际上并没有显着降低您的系统速度,那么我会说放弃优化并使用该测试迭代每个索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多