在插入元素之前检查 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()
中
请问在插入元素之前检查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()