草庐IT

unordered_multimap

全部标签

C++11 unordered_set with std::owner_less-like hashing

我正在使用外部网络库,它返回一些表示打开的套接字的神奇结构,文档说当将它们插入STL容器时,应该使用std::owner_less比较它们。std::map,std::owner_less>sockets;但是我想改用unordered_map。我该怎么做?std::owner_less是一个比较器,它对HashMap毫无用处。挖掘源代码,MagicStructure似乎是std::shared_ptr的类型定义。 最佳答案 不幸的是,您似乎必须使用map,而对于这种情况不能使用unordered_map:http://wg21.c

c++ - 如何遍历 multimap 并打印按键分组的值?

这个问题在这里已经有了答案:isthereaniteratoracrossuniquekeysinastd::multimap?(6个答案)关闭5年前。我有std::multimapdataMap;键在哪里MyObject.name并且所有MyObjects都存储在std::vector中.填充map后我需要打印dataMap的内容按相同的键分组,在dataMap.count(MyObject.name)的帮助下,我首先需要一些相同的键然后是带有此键的所有值。我正在考虑使用两个forloops第一个循环遍历“key组名称”并计算属于该组的所有key,另一个循环forloop遍历特定组中

c++ - 无法将 std::unorded_set 与自定义 KeyEqual 进行比较

以下程序无法编译。但是如果我不注释掉operator==,它会编译。为什么在我已经提供了FooEqual的情况下仍然需要operator==#include#includestructFoo{};structFooHasher{size_toperator()(constFoo&)const{return1;}};structFooEqual{booloperator()(constFoo&lhs,constFoo&rhs)const{returntrue;}};//booloperator==(constFoo&lhs,constFoo&rhs){//returntrue;//}in

c++ - boost::noncopyable 的 unordered_map 无法从 operator[] 返回引用

为了演示我的问题,请考虑这个无法编译的简单程序:#include#includeclassfoo:boost::noncopyable{};intmain(){std::unordered_mapm;auto&element=m[0];return0;}使用当前版本的boost(1.52),VisualStudio2012返回错误:无法访问类“boost::noncopyable_::noncopyable”中声明的私有(private)成员。std::unordered_map的运算符[]返回对所提供键处元素的引用,乍一看似乎应该有效——我要求的是对元素的引用,而不是它的拷贝.我对这

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++ - std::unordered_map::extract 引用/指针失效

对于新的C++17std::unordered_map::extract函数,文档说:Extractinganodeinvalidatesonlytheiteratorstotheextractedelement,andpreservestherelativeorderoftheelementsthatarenoterased.Pointersandreferencestotheextractedelementremainvalid,butcannotbeusedwhileelementisownedbyanodehandle:theybecomeusableiftheelementi

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

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

c++ - multimap 的每个元素都包含键和值吗?

我无法想象没有人问过这个问题,但我没有找到它的运气。multimap的每个元素是否包含其值和其键?multimap的内部结构是否更像这样:map>或者更像这样:vector> 最佳答案 每个元素都包含它的键和值。你可以看出是因为迭代返回一个稳定的非分配引用std::pair.此外,Keys可以比较相等但不同。multimap允许您在不属于排序的键中存储“额外数据”,之后您将取回它并将它与该值相关联。将multimap实现为std::map>是一个有时比使用std::multimap更好的选项.尤其是每个键有多个值时,它的内存效率更高

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++ - std::unordered_map<std::String, myClass*> - std::unordered_map::erase() 是否调用 myClass 的 DTor?

假设我有一些unordered_map指向类实例的指针,从该映射中删除一个对象是否也会删除该实例?(改写问题:)如果我想删除那个实例,哪个版本是正确的?if(it!=map.end()){deleteit->second;map.erase(it);}或者只是if(it!=map.end())map.erase(it);?更新:根据很多人的建议,我转而使用shared_ptr,效果很好! 最佳答案 不,因为这是标记的C++11,你应该首先使用std::unique_ptr/std::shared_ptr来管理你的对象指针,例如std