在插入之前检查元素是否存在于unorderd_set中

时间:2016-12-14 20:51:42

标签: c++ unordered-set

我想问一下在插入之前是否有任何检查unorderd_set中是否存在元素的点?根据{{​​3}}:

  

只有当元素不等同于容器中已有的任何其他元素时,才会插入每个元素(unordered_set中的元素具有唯一值)。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

insert()上的unorderd_set执行find()查看对象是否存在,然后插入对象。

因此,在您的代码中,find()

中有两个insert(),一个是显式的,另一个是显式的