concurrent_unordered_multimap
全部标签 我正在尝试在map和unordered_map之间进行选择以用于以下用例:map的键是一个指针。最常见的用例是map中只有一个元素。通常,map中的最大元素数小于10。map访问频率很高,速度是最重要的因素。很少更改map。虽然在这里测量速度显然是正确的方法,但此代码将在多个平台上使用,因此我试图创建一个通用的经验法则,用于在map和之间进行选择unordered_map基于元素的数量。我在这里看到一些帖子暗示std::map对于少量元素可能更快,但没有给出“小”的定义。是否有根据元素数量在map和unordered_map之间进行选择的经验法则?另一种数据结构(例如通过vector的
在VS2010引入的并发运行时,有一个concurrent_queue类。它有一个非阻塞的try_pop()函数。与英特尔线程构建模块(TBB)类似,从2.1版升级到2.2版时,阻塞的pop()调用已被删除。我想知道阻塞调用有什么问题。为什么从TBB中删除?还有为什么没有阻塞concurrent_queue?我处于需要阻塞并发队列的情况,并且我不想忙于等待。除了自己写队列,并发运行时是否还有其他可能? 最佳答案 来自acommentfromArchRobison,并没有更多"horse'smouth"比那个(a):PPL的concu
我有一些带有整数索引的数据。我不断生成新数据,这些新数据需要添加到我拥有的数据集合中,按该索引排序,同时我希望能够轻松地开始数据并遍历它。这听起来std::multimap正是我所需要的。但是,我还需要按照插入顺序保存具有相同索引的数据,在这种情况下,这意味着当我遍历数据时,我会先获取较早的数据,然后再获取较晚的数据。multimap会这样做吗?我没有找到任何保证是这种情况。在sgi手册中,我没有看到任何提及是否。我在gcc4.3.4实现上进行了尝试,对于一些有限的测试用例似乎是正确的,但我当然想知道标准是否要求这样做,我可以依赖这个事实。编辑:为了更清楚地回应一些答案,我希望数据首先
我想知道unordered_map使用类型删除实现,因为unordered_map和unordered_map可以使用完全相同的代码(除了强制转换,这是机器代码中的无操作)。也就是说,两者的实现都可以基于unordered_map。以节省代码大小。更新:这种技术通常被称为ThinTemplateIdiom(感谢下面的评论者指出这一点)。更新2:我对HowardHinnant特别感兴趣的意见。让我们希望他能读到这篇文章。所以我写了这个小测试:#include#ifBOOST#includeusingboost::unordered_map;#else#includeusingstd::u
我得到了错误error:calltoimplicitly-deleteddefaultconstructorof'__compressed_pair_elem':_Base1(std::forward(__t)),_Base2(){}使用以下代码。我犯了什么错误,我也无法理解错误。usingnamespacestd;automy_hash=[](vectorconst&vec){size_tseed=vec.size();for(auto&i:vec){seed^=i+0x9e3779b9+(seed>2);}returnseed;};usingMySet=unordered_set,
编辑:请注意,我不问为什么多重map不能包含重复的键。多重映射允许重复键值对背后的基本原理是什么?(不是键)#include#include#includeintmain(intargc,char**argv){std::multimapm;m.insert(std::make_pair("A","B"));m.insert(std::make_pair("A","B"));m.insert(std::make_pair("A","C"));std::cout这个打印出来的3让我有点吃惊,我希望multimap表现得像一组pairs,所以我期待2。直观地说,它与C++std::map行
我可以在C++中创建一个unordered_setvector吗?像这样的std::unordered_set>s1;因为我知道标准库的“set”类可以做到这一点,但它似乎不适用于无序版本谢谢更新:这正是我正在尝试使用的代码typedefintCustomerId;typedefstd::vectorRoute;typedefstd::unordered_setPlan;//...inthemainRouter1={4,5,2,10};Router2={1,3,8,6};Router3={9,7};Planp={r1,r2};如果我使用set也没关系,但是尝试使用无序版本时收到编译错误
这里是C++新手。我正在尝试在unordered_map中同时写入不同的存储桶。从我可以通过搜索得知,我的理解是这应该是一个线程安全的操作。我(可能不正确)的理解是基于答案here和here,以及C++11标准的引用部分(特别是第2项——强调我的):23.2.2Containerdataraces[container.requirements.dataraces]1Forpurposesofavoidingdataraces(17.6.5.9),implementationsshallconsiderthefollowingfunctionstobeconst:begin,end,rb
判断unordered_map容器中是否有带有指定键的项目的最快方法是什么? 最佳答案 它们的性能大致相同。您应该使用最能表达您想要做的事情的算法。详细说明一下,一般count()会使用find()来实现。例如,在libcxx,count()实现为return(find(__k)!=end()); 关于c++-unordered_map:whichoneisfasterfind()orcount()?,我们在StackOverflow上找到一个类似的问题: h
我有一个std::unordered_map,我将从迭代中删除元素。autoitr=myMap.begin();while(itr!=myMap.end()){if(/*removalcondition*/){itr=myMap.erase(itr);}else{++itr;}}我想阻止map执行任何昂贵的操作,直到我完成删除所有需要删除的元素。我有正当的担忧吗?我是否误解了内部存储的工作原理? 最佳答案 在erase期间禁止无序容器重新散列:[unord.req]/p14:Theerasemembersshallinvalidat