c++ - 在插入之前检查元素是否存在于 unordered_set 中

标签 c++ unordered-set

我想问一下在插入元素之前是否需要检查 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);

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

最佳答案

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

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

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

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

关于c++ - 在插入之前检查元素是否存在于 unordered_set 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41151938/

相关文章:

c++ - 如何让 `static_assert` 打印失败时得到的值?

c++ - 无序设置为 boost::asio::ip::tcp::endpoint - 试图引用已删除的函数

c++ - unordered_set 范围插入 VS 迭代器

c++ - Qt 插槽和小型转储

c++ - 原子读/写值的静态断言

c++ - OpenCV-2.4.0,NetBeans7.0.1,Ubuntu11.10,对`cv::Mat::zeros(int, int, int) 的 undefined reference

c++ - 在 C++ 中格式化带小数秒的日期和时间

c++ - 为什么 unordered_set 使用的内存比它包含的数据多得多?

c++ - `std::unororder_set<std::string>` 中的碰撞

c++ - 在开始时使用所有可用数据构建大型(ish)无序集