我有一个proto类A,A中有repeated的变量B,B有id,如何根据id删除对应的B,用C++实现
时间: 2024-03-13 20:45:50 浏览: 17
可以使用erase-remove idiom来实现根据id删除对应的B。具体步骤如下:
1. 使用std::remove_if函数将所有id匹配的B从数组中移动到末尾,并返回指向新数组结尾的迭代器;
2. 再使用std::vector的erase函数删除从新数组结尾到原数组结尾的所有元素。
以下是代码示例:
```c++
// 定义A类和B结构体
class A {
public:
struct B {
int id;
// 其他变量
};
std::vector<B> b_array;
// 其他变量和函数
};
// 定义lambda表达式,用于判断B的id是否与给定id相等
auto is_id_match = [](const A::B& b, int id) { return b.id == id; };
// 定义函数,根据id删除对应的B
void delete_B_by_id(A& a, int id) {
auto new_end = std::remove_if(a.b_array.begin(), a.b_array.end(),
[id, &is_id_match](const A::B& b) { return is_id_match(b, id); });
a.b_array.erase(new_end, a.b_array.end());
}
```
使用时,调用delete_B_by_id函数,并传入A对象和要删除的B的id。该函数会自动删除所有id匹配的B。