【发布时间】:2014-03-20 17:52:37
【问题描述】:
我怎样才能有效地实现这个显然不存在(为什么?)的功能:
std::pair<iterator,bool> std::set::insert (const_iterator hint, const value_type& val);
我想有效地插入一个值(带有提示),同时有一个布尔值告诉我它是否已插入(这是必不可少的)。
为什么没有这样的功能。我想不出一个有效地做到这一点的可能性吗?
非常感谢!
【问题讨论】:
-
高效定义...为什么需要确定?这是一个多线程问题,其中集合是共享资源并且可以用锁来解决?通常,如果集合已分配,则将在集合中插入元素,除非您要复制大量元素并在此过程中破坏内存。
-
@Claudiordgz 据推测,他的意思是获得与另一个采用插入提示的
set|map::insert重载相同的摊销恒定时间插入性能。多线程与此有什么关系?至于你最后一句话,我不知道你在说什么! -
我现在明白了。谢谢你。但是当您插入
set时,它会将迭代器返回到您插入的位置。 @Gabriel 这似乎是添加到std::set的好提议。同时,您可以对要插入集合中的元素进行二进制搜索,如果存在则不要插入。如果是,请检查迭代器的有效位置。请记住,插入无效位置会被传递,您可能会遇到问题。 -
我的意思正是 Praetorian 指出的 :-)!
标签: c++ c++11 stl stdmap stdset