我必须查找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/

10-16 22:47