void removeDuplicates(struct Node *start){
unordered_set<int> seen;
struct Node *curr = start;
struct Node *prev = NULL;
while(curr != NULL){
if(seen.find(curr->data) != seen.end()){
prev->next = curr->next;
delete(curr);
}
else{
seen.insert(curr->data);
prev = curr;
}
curr = prev->next;
}
}
c ++的新手,任何人都可以解释这种情况:
if(seen.find(curr->data) != seen.end())
为什么我们应该只与集合的end()比较,我们不应该只是检查是否已经可以找到集合中的元素吗?
答案 0 :(得分:1)
我们不应该检查是否已经找到集合中的元素吗?
这正是该代码的作用。 std::unordered_set::find
返回 iterator 到元素(如果找到),否则返回结束迭代器。
如果数据不在集合中,则执行if
语句的else分支,否则,如果它在中,则为true分支。
答案 1 :(得分:0)
seen.find(curr->data)
将迭代器返回其找到的内容。
如果找不到所请求的内容,它将返回列表中最后一个元素之后的迭代器。这称为seen.end()
。
因此if
正在检查发现的是请求的内容。 (不是集合的结尾)