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

Checking if element exists in unorderd_set before inserting it

请问在插入元素之前检查unorderd_set中是否存在元素有什么意义吗?根据documentation:

Each element is inserted only if it is not equivalent to any other element already in the container (elements in an unordered_set have unique values).

所以如果我的情况是正确的:

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

不需要 - 对吗?如果我尝试插入已经在集合中的元素,实际会发生什么。它做的检查和我做的完全一样吗?

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

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

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

如果您的 Element 对象代表一个元素,例如氧,它可能包含一个原子序数值和一个名称字符串。如果你只想让氧气出现一次,一组指针不会自动做到这一点。

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

因此在您的代码中它们是两个 find(),一个是显式的,另一个在 insert()