C++ 在无序_集合中插入新元素:提示是否应为end()?
如果我确定某个值尚未进入C++ 在无序_集合中插入新元素:提示是否应为end()?,c++,stl,c++11,C++,Stl,C++11,如果我确定某个值尚未进入无序集,并且我将插入该值,那么将该集end()迭代器作为提示传递是否正确 编辑: 代码: #包括 使用名称空间std; 无序集; int main(){ autoit=someset.find(0); if(it==someset.end())someset.insert(it,0);//正确吗?如果实际填充了该集,可能会提高性能吗? } 我假设您指的是迭代器插入(const\u iterator hint,value\u type&&val)是C++11的无序集的成员。
无序集
,并且我将插入该值,那么将该集end()
迭代器作为提示传递是否正确
编辑:
代码:
#包括
使用名称空间std;
无序集;
int main(){
autoit=someset.find(0);
if(it==someset.end())someset.insert(it,0);//正确吗?如果实际填充了该集,可能会提高性能吗?
}
我假设您指的是迭代器插入(const\u iterator hint,value\u type&&val)
是C++11的无序集的成员
。如上所述,插入新元素时,提示用于性能优化。新元素的插入/位置基于哈希。因此,如果您知道如何为您的值\u类型生成哈希,您可以预生成它并向容器提供提示
但是,编译器可能会决定不使用它。因此,我的假设是:可以使用end()
,但它可能没有任何效果。我认为,您可以简单地调用insert
函数,返回的值将告诉您值是插入的,还是已经存在于集合中
auto p = someset.insert(value);
if (!p.second)
{
std::cout << "value was already present in the set" << std::endl;
}
autop=someset.insert(值);
如果(!秒)
{
std::cout我相信提示对无序集
是没有用的,就像无序映射
是没有用的一样。这些方法的存在是为了保持这些容器的接口与它们的有序版本兼容(分别是集
和映射
)
阅读此处的更多内容:显示一些代码示例以说明您的意思。
auto p = someset.insert(value);
if (!p.second)
{
std::cout << "value was already present in the set" << std::endl;
}