【问题标题】:Erase vector element from vector of objects by value [duplicate]按值从对象向量中擦除向量元素[重复]
【发布时间】:2016-07-27 14:29:21
【问题描述】:

我有一个学生对象的 c++ 向量,每个对象都有一个 ID(字符串)、名称(字符串)和年龄(整数)。

std::vector<student> myVector;

假设矢量看起来像这样

[{“1”,“汤姆”,12},{“2”,“大卫”,10},{“3”,“亚当”,15},{“4”,“吉尔”,20 }]

有什么方法可以使用学生姓名删除向量中的对象,例如:

myVector.deleteObjectWithName(David)

这样我的剩余向量现在是

[{"1", "汤姆", 12}, {"3", "亚当", 15}, {"4", "吉尔", 20}]

【问题讨论】:

  • std::remove_if 是你所需要的
  • 这不是您标记的同一个问题:询问价值,而这需要remove_if
  • 当然,正如您提出的问题,std::remove_if 是@DimChtz 指出的答案。但我可以想象,通常你想通过 ID 查找学生,在这种情况下,std::map 可能是更有用的数据结构。 (另外,为什么学生 ID 是一个字符串?) {edit} nvm,看到你想按名称而不是 ID 删除。不过,一般性的评论可能仍然有用。
  • 我已经编辑了这个问题。我想按名称删除。学生 ID 是一个字符串,因为我不打算对其进行任何算术运算
  • 但如果它是一个唯一的数字,将其设为数字​​数据类型仍然有一些优势,例如您可以快速将其与其他 ID 进行比较,并可以安全地将其用作 @987654327 的键@。同意副本不是重复的事实。

标签: c++ vector


【解决方案1】:

std::remove_if 是你需要的:

myVector.erase(std::remove_if(myVector.begin(), myVector.end(), 
  [](students const& s) { return s.name == "David"; }), myVector.end());

【讨论】:

  • 我稍微格式化了输出,我认为缺少一个括号。请检查是否正确。
  • 是的,我错过了那个括号,在我发现问题被关闭后忘记重新检查它
猜你喜欢
  • 1970-01-01
  • 2021-03-05
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多