我必须查找list<SnakeParts>
中是否有双打,如果有双打,则将live设置为false
我尝试了unique()
的list
函数,并向我的类(class)添加了operator==()
。
现在,当我执行唯一功能时,不会过滤掉双打。在进行一些调试之后,我发现==
比较器仅在列表中存在对象的情况下被执行多次,因此我使用以下代码:
list<SnakePart> uniquelist = m_snakeParts;
uniquelist.unique();
if (m_snakeParts.size() != uniquelist.size()){
alive = false;
}
运算符(operator):
bool SnakePart::operator==(const SnakePart& snakePart) const{
return (x == snakePart.x && y == snakePart.y );
}
但这不起作用。所以我在做什么错,还是有另一种方法可以做到这一点?
最佳答案
std::list::unique
仅适用于连续重复项。说,如果我们有一个{1, 2, 2, 1}
,则在调用unique
之后,我们得到了{1, 2, 1}
。您可以先使用sort
函数(N * log(N) + N
复杂度),或者使用std::map
对列表中的每个元素进行计数(线性,+ N内存(在最坏的情况下))。
关于c++ - C++查找在列表中加倍,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16696685/