按键擦除矢量元素
Posted
技术标签:
【中文标题】按键擦除矢量元素【英文标题】:Erasing a vector element by key 【发布时间】:2009-11-07 06:04:41 【问题描述】:我定义了以下内容并用元素填充它:
vector <vector<double> > my_vector;
但我想删除具有特定键的元素...
my_vector.erase(int(specific_key));
但它不允许我。我将如何正确处理分配给该键的元素?
【问题讨论】:
向量中没有键,只有索引... 【参考方案1】:假设specific_key
是指vector
中该位置的元素:
my_vector.erase(my_vector.begin() + specific_key);
将是“最正确”的答案。
如果您要删除与 specific_key
匹配的元素(在给定示例中必须是 vector<double>
类型:
my_vector.erase(find(my_vector.begin(), my_vector.end(), specific_key));
【讨论】:
是的,我想删除向量中该位置的元素。当我应用你加的代码(第一个)时,我的应用程序冻结了。 别介意冻结是由其他原因引起的。一旦我解决了冻结问题,将对此进行测试。 +1,对于这两个选项。确保在擦除之前检查 end()。【参考方案2】:erase 接受一个迭代器作为参数。
你可以的
my_vector.erase (my_vector.begin() + specific_key);
你也可以传入一个范围
my_vector.erase (my_vector.begin(), my_vector.begin() + 2);
您应该注意的一件事是矢量的大小也会减小。
【讨论】:
【参考方案3】:erase 方法将迭代器作为参数。
Example
【讨论】:
【参考方案4】:如果特定键不是位置并且说它在向量中的一些数据,那么必须为该数据迭代向量并擦除特定的迭代器。
【讨论】:
以上是关于按键擦除矢量元素的主要内容,如果未能解决你的问题,请参考以下文章