我想删除重复字段中的项目
比方说我们有消息定义:
message foo {
repeated string temp1 ;
repeated string temp2 ;
}
我想在某个随机索引处从temp1中删除项目;
据我所知,我可以通过交换最后一个元素并使用RemoveLast删除; 但我不知道如何使用它。有关c ++中代码快照的任何帮助吗?
答案 0 :(得分:0)
以下是一个reason为什么Remove()
中没有protocol buffer
。
我不想提供
Remove(int)
,因为它是O(n)
。协议缓冲区的版本1 具有这样的功能,我们经常看到人们编写如下循环:for (int i = 0; i < field.size(); i++) { if (ShouldFilter(field[i])) { field.Remove(i); --i; } }
这个循环是
O(n^2)
,这很糟糕,但很难说它是O(n^2)
。仅提供RemoveLast()
背后的想法是强迫你做一些聪明的事情(比如首先用文件建议交换最后一个元素的元素)或编写你自己的循环,这会使你的代码的时间复杂性变得明显。
这里有两个选项:
将项目从列表末尾复制到您要删除的项目以前占用的空间,然后拨打RemoveLast()
。
使用iterator erase(const_iterator position)
,但您应该从begin()
开始,然后检查是否应删除此迭代器的值。