我想问一下在插入之前是否有任何检查unorderd_set
中是否存在元素的点?根据{{3}}:
只有当元素不等同于容器中已有的任何其他元素时,才会插入每个元素(unordered_set中的元素具有唯一值)。
所以,如果我在我的情况下正确地得到它:
Element *element = new Element;
//...
if ( my_set.find (element) == my_set.end() )
my_set.insert(element);
这不是必需的 - 对吗?如果我尝试插入已经在集合中的元素,实际发生了什么。它与我正在进行的检查完全相同吗?
答案 0 :(得分:2)
如果您尝试插入已存在的值,则该集将保持不变。该调用将返回一个包含迭代器和布尔值的对。如果项目已经存在,则布尔值为false。
http://en.cppreference.com/w/cpp/container/unordered_set/insert
请注意,在您的情况下,集合包含指针,它只会阻止您有重复的指针,而不是重复的内容。例如,
如果您的Element
对象表示一个元素,如Oxygen,它可能包含原子序数的值和名称的字符串。如果你只想让氧气出现一次,那么一组指针就不会自动执行此操作。
答案 1 :(得分:0)
insert()
上的unorderd_set
执行find()
查看对象是否存在,然后插入对象。
因此,在您的代码中,find()
insert()
,一个是显式的,另一个是显式的