草庐IT

Multimap

全部标签

c++ - 对于对象图,我可以放置对象还是成对放置对象?

我使用的是C++11和gcc-4.7.0。我正在寻找STL解决方案。我想要一个未排序的multimap,其中包含以短字符串作为键的myClass对象。Emplace看起来是一种在我构建对象时将对象放入map的好方法,但我不确定它是否可以这样做,或者它是否只会构建键/对象对。这应该是有效的:table.emplace(myKey,myClass(arg1,arg2,arg3));但是执行以下操作会更有效率吗,它甚至是有效代码吗?table.emplace(myKey,arg1,arg2,arg3); 最佳答案 根据this,gcc-4

c++ - 我可以复制到 multimap 吗

给定一个istream_iterator和multimapoutput.我想将所有值复制到output中的'a'key。最好的处理方式是什么?我曾尝试使用:transform(istream_iterator(input),istream_iterator(),begin(output),[](constautovalue){returnmake_pair('a',value);})但是我得到了错误:error:assignmentofread-onlymemberstd::pair::first我认为这意味着我无法写入begin(output).我唯一的选择是使用for_each?

c++ - 根据键值从 multimap 中删除元素?

我如何从std::multimap中删除键小于或等于20的所有元素?我知道如何删除,我不知道如何传入条件“keylessthan20”。 最佳答案 下一个代码应该可以工作:std::multimapM;//initializeMhereautoit=M.upper_bound(20);M.erase(M.begin(),it);只需使用upper_bound然后erase. 关于c++-根据键值从multimap中删除元素?,我们在StackOverflow上找到一个类似的问题:

c++ - 放置指向 shared_ptr 的多重映射的指针不起作用

vector工作正常Headerstd::vector>subnodes_m;DefinitionvoidCompositeSceneNode::AddChild(SceneNode*subnode_p){subnodes_m.emplace_back(subnode_p);}multimap没有Headerstd::multimap>subnodes_m;DefinitionvoidCompositeSceneNode::AddChild(SceneNode*subnode_p,unsignedintlayerIndex){subnodes_m.emplace(layerIndex,

c++ - 如何将 std::unordered_multimap<uint, T> 转储到 std::vector<T>?

我正在尝试从std::unordered_multimaplookup开始到std::vectorv到目前为止我已经尝试过了std::vectorv(lookup.begin(),lookup.end());但它显然不起作用,因为begin()的结果迭代器和end()类型为pair,那么最快的正确方法是什么?感谢您的帮助! 最佳答案 提取hashmap中std::pair的value部分,放入vector中:#include#include#includeintmain(){usingMap=std::unordered_multi

c++ - 在 C++ std::multimap 上调用 .clear() 或 .erase() 有时会导致卡住(100% cpu)

我们使用多重映射来快速查找值/索引,声明如下typedefdoubleNumerical;std::multimapSortableRowIndex;然后我们用对填充它,使用SortableRowIndex.insert(std::pair(GetSortable(i),i));函数GetSortable()总是返回一个double值。这很好用。遍历这些值也可以正常工作。但奇怪的部分来了……有时当我们试图清除数据时……SortableRowIndex.clear();...它进入某种循环并停止/竞争,以100%占用CPU的已用内核。clear方法好像是继承自xtree(系统文件),里面

C++ 多映射迭代器失效

我试图弄清楚std::multimap迭代器是如何工作的,因此我创建了一个简单的示例来说明我的问题的实质。如果取消注释案例1,我希望迭代器指向具有键1的第一个元素,但实际上它会打印与键0关联的所有值(就像什么都没有被删除),有时它会崩溃,可能是因为迭代器无效。但是,如果取消注释案例2,则所有具有键1的值都将被正确删除。有没有办法知道删除后multimap的下一个有效迭代器是什么?(例如std::vector.erase(...)返回一个)std::multimapm;for(intj=0;j::iteratorit=m.begin();it!=m.end();){printf("%d%

c++ - 迭代器失效 - end() 是否算作迭代器?

我在使用std::multimap::equal_range()和insert()时遇到了以下问题。根据cplusplus.com和cppreference.com,std::multimap::insert不会使任何迭代器无效,但以下代码会导致无限循环:#include#include#includeintmain(intargc,char*argv[]){std::multimaptestMap;testMap.insert(std::pair("a",1));testMap.insert(std::pair("a",2));testMap.insert(std::pair("a"

c++ - 我应该为我的目的使用哪种数据结构?

这个问题在这里已经有了答案:InwhichscenariodoIuseaparticularSTLcontainer?(10个答案)关闭9年前。我需要一个像map一样的数据结构,但每个键可能有多个与之相关的值,但我需要获取与单个键对应的所有值作为对象数组。那么哪种数据结构最适合执行此操作。我不需要在数据结构中搜索,我只需要快速访问与特定键对应的所有值。我查看了std::multimap但它没有返回特定键的所有值。那么我可能会使用哪种C++中最好的数据结构?

c++ - 放置在 unordered_map 中的项目是存储在堆栈还是堆中?

假设我有以下类(class):classMyOtherClass{std::unordered_map>_xy;voidputObject(intx,inty,MyClass*obj);voidcontainsXkey(intx){boolfound=false;std::unordered_map>::const_iteratorindex=_xy.find(x);if(index=_xy.end(){found=false;}else{found=true;}returnfound;}}假设我想编写一个函数将MyClass放置在坐标(2,3)处,那么我会这样做:voidputObj