C++ 插入前检查无序_集中是否存在元素

C++ 插入前检查无序_集中是否存在元素,c++,unordered-set,C++,Unordered Set,我想问一下,在插入元素之前,是否有必要检查元素是否存在于无序集?根据: 仅当每个元素不等同于容器中已有的任何其他元素(无序集合中的元素具有唯一值)时,才会插入该元素 因此,如果我在我的案例中得到了正确的答案: Element *element = new Element; //... if ( my_set.find (element) == my_set.end() ) my_set.insert(element); 它不是必需的-正确吗?如果我尝试插入集合中已经存在的元素,实际会发

我想问一下,在插入元素之前,是否有必要检查元素是否存在于
无序集
?根据:

仅当每个元素不等同于容器中已有的任何其他元素(无序集合中的元素具有唯一值)时,才会插入该元素

因此,如果我在我的案例中得到了正确的答案:

Element *element = new Element;
//...
if ( my_set.find (element) == my_set.end() )
    my_set.insert(element);

它不是必需的-正确吗?如果我尝试插入集合中已经存在的元素,实际会发生什么。它是否与我正在执行的检查完全相同?

如果您尝试插入一个已经存在的值,该集将保持不变。调用将返回一个包含迭代器和布尔值的对。如果该项已存在,则布尔值将为false

请注意,在集合包含指针的情况下,它只会阻止您拥有重复的指针,而不是重复的内容。比如说,


如果您的
元素
对象表示元素,如氧,则它可能包含原子序数的值和名称的字符串。如果您只希望氧气显示一次,一组指针将不会自动执行此操作。

如果您尝试插入一个已经存在的值,该集合将保持不变。调用将返回一个包含迭代器和布尔值的对。如果该项已存在,则布尔值将为false

请注意,在集合包含指针的情况下,它只会阻止您拥有重复的指针,而不是重复的内容。比如说,

如果您的
元素
对象表示元素,如氧,则它可能包含原子序数的值和名称的字符串。如果您只希望氧气出现一次,一组指针将不会自动执行此操作。

无序集上的
insert()
执行
find()
以查看对象是否存在,然后插入对象

因此,在您的代码中,它们是两个
find()
,一个显式,另一个在
insert()
unorder\u set上的
insert()
执行
find()
以查看对象是否存在,然后插入对象


所以在你的代码中有两个
find()
,一个是显式的,另一个在
insert()

阅读文档,卢克:另外,帮你自己一个忙,不要使用原始指针。卢克:另外,帮你自己一个忙,不要使用原始指针。我不明白你最后一句话想说什么。。。如果您必须使用相同类型的相同指针(相同地址):在您的操作中,哪些内容是/可以重复的?@SimonKraemer如果元素对象的某些方面他试图保持唯一,使用一组指针是不行的。@SimonKraemer我很感激这个问题。我不明白你最后一句话想说什么。。。如果您必须使用相同类型的相同指针(相同地址):在您的操作中哪些内容是/可以重复的?@SimonKraemer如果元素对象的某些方面他试图保持唯一,使用一组指针将无法做到这一点。@SimonKraemer我很欣赏这个问题。