1
105
几乎。
您最初拥有的将增加迭代器 两次 如果您确实从中删除了一个元素,那么您可能会跳过需要删除的元素。 这是一种常见的算法,我在很多地方都看到过它的使用和记录。 [编辑]正确的做法是,在擦除后迭代器无效,但只有引用被擦除元素的迭代器,其他迭代器仍然有效。因此,在erase()调用中使用iter+。 |
2
64
删除std::map(和其他容器)的“if”我使用下面的模板来处理这个问题。
这不会返回任何内容,但会从std::map中删除这些项。 使用实例:
第二个示例(允许您传递测试值):
|
3
3
我从 excellent SGI STL reference :
所以,指向要删除的元素的迭代器当然会失效。这样做:
|
4
2
原始代码只有一个版本:
这里
|
5
1
从下面的注释: http://www.sgi.com/tech/stl/PairAssociativeContainer.html 成对关联容器不能提供可变迭代器(如琐碎迭代器要求中定义的那样),因为可变迭代器的值类型必须是可赋值的,而成对不可赋值。但是,成对的关联容器可以提供不完全恒定的迭代器:迭代器使得表达式(*i).second=d有效。 |
6
1
弗斯特
其次,下面的代码是好的
调用函数时,参数在调用该函数之前进行计算。 因此,在调用erase之前对iter++进行计算时,迭代器的++运算符将返回当前项,并在调用之后指向下一个项。 |
7
1
我不知道有没有
|
8
1
现在,
见: http://en.cppreference.com/w/cpp/experimental/map/erase_if |
9
1
基于 Iron Savior's answer 对于那些希望沿着std函数taking迭代器提供更多范围的函数。
好奇是否有某种方法可以丢失containerive项并从迭代器中得到它。 |
10
0
Steve Folly's answer 我觉得效率越高。 这里是另一个 简单但效率较低的解决方案 :
解决方案使用
|
11
0
如果要删除键大于2的所有元素,最好的方法是
但只适用于范围,不适用于任何谓词。 |
12
0
我喜欢这样
|
lagivan · 如何使用map参数测试XQuery函数 10 年前 |
sagar · 我们可以在其他映射中使用嵌套映射作为键吗? 10 年前 |
user2906420 · 创建传单自定义复选框控件 10 年前 |
Ali-Alrabi · 要根据对象键对地图进行排序 10 年前 |
SimplGy · javascript中按对象引用哈希 10 年前 |
city · 如何在C++映射中提取具有相同前缀的记录? 10 年前 |
alvas · 使用带有附加参数的map-python 10 年前 |
Bapho · ArrayList还是Map?还有关于如何存放孩子的帮助 10 年前 |