草庐IT

set_allocated

全部标签

c++ - 在只有 const shared_ptr 的 unordered_set 中找到一个 shared_ptr?

我有一个unordered_set>us我想知道是否有针k在us,但是k类型为shared_ptr所以unordered_set>::find提示它无法转换。有解决办法吗?也许通过直接提供哈希?我试过const_cast(感觉很脏)但这并没有解决问题。 最佳答案 使用std::const_pointer_cast在这里是一个可能的解决方案。us.find(std::const_pointer_cast(k));因为您没有修改k,所以可以丢弃const。 关于c++-在只有constsha

c++ - sets、multisets、maps 和 multimaps 如何在内部工作

多重集如何运作?如果集合不能将值映射到键,它是否只包含键?此外,关联容器如何工作?我的意思是内存中的vector和deque是按顺序放置的,这意味着如果它们很大,删除/删除(除了开始[deque]和结束[vector,deque])会很慢。而list是一组指针,它们在内存中没有按顺序定位,这导致搜索时间更长但删除/删除速度更快。集合、映射、多重集合和多重映射如何存储以及它们如何工作? 最佳答案 这4个容器通常都是使用“节点”实现的。节点是存储一个元素的对象。在[multi]set的情况下,元素就是值;在[multi]map情况下,每

c++ - STL map 和 set 中的排序顺序

用户定义的对象在map和set中是如何排序的?据我所知,map/set是SortedAssociativeContainers:被插入的元素根据其持有的键进行排序。但是map和set在内部使用operator>对它们的元素进行排序。在SGI站点上,我有以下示例:structltstr{booloperator()(constchar*s1,constchar*s2)const{returnstrcmp(s1,s2)months;months["january"]=31;months["february"]=28;months["march"]=31;months["april"]=30

c++ - 不区分大小写的 STL 容器(例如 std::unordered_set)

制作std::unordered_setCASE-INSENSITIVE容器的最短、最跨平台的方法是什么?my_set.insert("Apples");my_set.insert("apples");//Insertdoesn'toccurbecauseofduplicateitem我知道STL提供了Hash和Pred。Hash应该是什么?Pred应该是什么?如果它们不是内置的,那么请提供它们的代码以及它们的使用示例(即我如何声明std::unordered_set?)。由于批评,我将详细说明我正在尝试做的事情。我需要一个高性能的透明HTTP代理服务器,它所做的其中一件事就是快速查找

c++ - 如何在 C 语言的 gdb 中调试 St9bad_alloc 失败?

我有一个程序失败了:terminatecalledafterthrowinganinstanceof'std::bad_alloc'what():St9bad_alloc我想这与malloc/free有关,但我不知道是哪一个。我可以在gdb中设置什么断点来中断错误,以便我可以查看堆栈跟踪?该程序是C和C++的组合,使用gcc3.4.2编译。 最佳答案 导致异常的并不是真正的malloc/free,它是“新的”,它肯定在您的应用程序的C++部分中。看起来您提供的参数对于"new"分配来说太大了。'std::bad_alloc'是由以下

c++ - 为什么我不能用谓词的实例化构造 std::set,但我可以分配以这种方式构造的 std::set?

所以我有一个数组(0-n),其中包含我希望std::set用于其排序的值。该数组是unsignedintcost[n]。我正在使用以下仿函数进行排序:structProxySorter{ProxySorter(constunsigned*arr):proxy_array(arr){}booloperator()(constunsigned&a,constunsigned&b)const{returnproxy_array[a]问题来了...当我构建集合时,这是合法的:std::setnode_queue=std::set(ProxySorter(cost));我没有收到任何错误,一切都

c++ - 查找范围 [a, b] 中不在给定 std::set S 中的所有数字

让a和b是整数,a.给定一个std::setS什么是一种有效的和优雅(最好没有显式循环)的方式来查找和存储(到vector中)来自[a,b]的所有数字不在S中.解决方案一:vectorv;for(inti=a;i解决方案2:压入a中的所有数字至b进入set并使用std::set_differenceSolution1包含一个显式循环,而solution2似乎不是很有效(至少在内存方面)。你有什么建议?我正在寻找一种优雅的STL-ish(提升也是可以接受的)惯用方式来做到这一点。 最佳答案 您可以执行与您的解决方案#2类似的操作。但不

c++ - std::allocator 构造/销毁与放置 new/p->~T()

对于我的一个项目,我正在从头开始编写一些STL容器(我有我的理由)。由于我非常接近地模仿STL的功能和接口(interface),所以我会尽最大努力遵守“如果它与标准结构同名,它将尽可能符合标准”的政策。所以,当然我的容器将分配器作为模板参数,这非常好,因为它允许一些自定义分配方案。关于我的问题。std::allocator接口(interface)将内存分配与对象构造分开。同样,它将释放与销毁分开。这是有道理的,因为从哪里获取内存与在C++中正确构造对象或多或少无关。所以有两个构造/释放函数,默认实现如下所示(直接从书中摘录):voidconstruct(pointerp,const

c++ - C++ STL set容器的count()方法为什么这样命名?

它真正检查的是contains()而不是出现的次数,对吧?也不允许重复,所以contains()不是比count()更好的名字吗? 最佳答案 这是为了使其与其他容器类保持一致,因为多态性的一个重要方面是能够使用相同的API处理不同的类。它确实实际上返回了计数。一个集合的计数只能为零或一个这一事实不会改变这一方面。它与集合对象根本上并没有什么不同,后者只允许同时具有每个“值”的两个事物。在那种情况下,它会返回零、一或二的计数,但它仍然是一个计数,与集合相同。标准的相关部分是C++1123.2.4,其中讨论了关联容器set、multis

c++ - std::set 的 union 操作

这个问题在这里已经有了答案:Mergemultiplesetselementsinasingleset(4个答案)appendsettoanotherset(2个答案)关闭8年前。标准库中没有这样的函数吗?setset::union(setother)甚至这个?setgetUnion(seta,setb)set_union只是名称上的正确函数。它也可以对vector进行操作,这意味着它可能不如set-only函数高效。我不是追加。追加会破坏原始集。我想要一个代表联盟的新集。