Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;在列表中查找双精度_C++_List_Compare - Fatal编程技术网

C++ C++;在列表中查找双精度

C++ C++;在列表中查找双精度,c++,list,compare,C++,List,Compare,我必须找到我的列表中是否有双精度,如果有双精度,则将alive设置为false 我尝试了list的unique()函数,并在我的类中添加了一个操作符==()。 现在,当我执行unique函数时,我不会过滤掉double。经过一些调试后,我发现==比较器的执行次数与我列表中的对象相同,我使用了以下代码: list<SnakePart> uniquelist = m_snakeParts; uniquelist.unique(); if (m_snakeParts.size() != u

我必须找到我的
列表中是否有双精度,如果有双精度,则将alive设置为false

我尝试了
list
unique()
函数,并在我的类中添加了一个
操作符==()
。 现在,当我执行unique函数时,我不会过滤掉double。经过一些调试后,我发现
==
比较器的执行次数与我列表中的对象相同,我使用了以下代码:

list<SnakePart> uniquelist = m_snakeParts;
uniquelist.unique();
if (m_snakeParts.size() != uniquelist.size()){
    alive = false;
}
但这不起作用。那么,我做错了什么,或者有没有其他方法可以做到这一点

请注意,只有当元素与紧靠它前面的元素进行比较时,才会从列表容器中删除该元素。因此,此函数对于排序列表特别有用

因此,您必须事先对列表进行排序,或者使用std::set(set本质上不能包含重复的对象)

请注意,只有当元素与紧靠它前面的元素进行比较时,才会从列表容器中删除该元素。因此,此函数对于排序列表特别有用


因此,您必须事先对列表进行排序,或者使用std::set(set本质上不能包含重复的对象)。

std::list::unique
仅适用于连续的重复对象。比如说,如果我们有一个
{1,2,2,1}
,在调用
unique
之后,我们得到了
{1,2,1}
。您可以在之前使用
sort
函数(
N*log(N)+N
complexity),或者使用
std::map
对列表中的每个元素进行计数(线性,+N内存(在最坏的情况下))。

std::list::unique
仅适用于连续的重复项。比如说,如果我们有一个
{1,2,2,1}
,在调用
unique
之后,我们得到了
{1,2,1}
。您可以在前面使用
sort
函数(
N*log(N)+N
复杂度),或者使用
std::map
来计算列表中的每个元素(线性,+N内存(在最坏的情况下))。

如果不需要使用
std::list
,那么我建议使用它,因为它不允许您计算已经在集合中的元素。此外,
insert
方法将通过其返回值让您知道您尝试插入的元素是否已经在集合中


如果需要使用
std::list
,那么我建议您使用算法删除重复项。请看一下其中的示例。

如果不需要使用
std::list
,那么我建议使用它,因为它不允许您访问集合中已经存在的元素。此外,
insert
方法将通过其返回值让您知道您尝试插入的元素是否已经在集合中


如果需要使用
std::list
,那么我建议您使用算法删除重复项。请看一下其中的示例。

相关:……另外,这是一个蛇游戏吗?如果是这样,您应该只检查列表中的头(列表的第一个)是否重复:……另外,这是一个蛇游戏吗?如果是这样,您应该只检查列表中的头(列表的第一个)是否重复
bool SnakePart::operator==(const SnakePart& snakePart) const{
    return (x == snakePart.x && y == snakePart.y );
}