2016-12-14 129 views
0

我想问一下在插入元素之前是否有任何检查元素是否存在于unorderd_set中?根据documentation插入之前检查unorderd_set中是否存在元素

每个元件被插入,只有当它是不等同于在容器已任何其它元素(在unordered_set元素具有唯一值)。

所以,如果我正确地得到它在我的情况:

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

不要求 - 是否正确?如果我尝试插入已经在集合中的元素,实际上会发生什么。它是否与我正在做的检查完全一样?

+1

内阅读文档,卢克:http://en.cppreference.com/w/cpp/container/unordered_set/insert –

+2

此外,请自己帮忙,不要在Raw Pointers中贩卖。 –

回答

2

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

http://en.cppreference.com/w/cpp/container/unordered_set/insert

注意,在你的情况下集合包含指针,它只会阻止你有重复的指针,不重复的内容。例如,

如果您的Element对象表示元素(例如Oxygen),则它可能包含原子序号值和该名称的字符串。如果您只想让氧气出现一次,一组指针不会自动执行此操作。

+1

我没有得到你想要说的最后一句话......如果你必须有相同类型的指针(相同的地址):你的opninion中可以复制哪些内容? –

+0

@SimonKraemer如果有一些元素对象的某些方面试图保持唯一性,那么使用一组指针就不会那样做。 –

+0

现在更清楚了。 +1为更新的答案。 –

0

insert()unorderd_set做了find()来查看对象是否存在,然后插入对象。

因此,在你的代码,他们是两个find(),一个明确的,和其他的insert()