【发布时间】:2020-09-22 19:00:27
【问题描述】:
我正在尝试获取要从字符串中删除的迭代器列表。我想用 unsorted_set 来做,因为访问时间是恒定的,我会经常查找,但它给了我一个编译错误。
unordered_set<string::iterator> to_erase
但是,如果我尝试定义 vector<string::iterator> to_erase 它会起作用。
但是当我尝试这样做时:
find(to_erase.begin(),to_erase.end(),it)
没用
【问题讨论】:
-
您可能在这里遇到了 XY 问题——试图找到一个问题的解决方案和另一个问题的解决方案——如果你描述了过度的问题,有人可能会提出更好的解决方案过度的问题。
-
您想要一个用于擦除的迭代器列表,但您想在该列表中进行大量查找?如果您正在擦除某些内容,那么您肯定不需要多次查找它。你到底想做什么?
-
请记住,一旦您开始删除,迭代器通常很快就会失效。我还没有找到对
std::string失效规则的直接引用,但我怀疑它们与std::vector会有很大不同。无论如何,当您开始通过可删除的迭代器的无序列表进行删除时,很有可能您在有机会删除它们之前至少使一些后来的迭代器无效