我正在寻找可以执行多个键查找的C++关联映射容器类型。map需要有恒定的时间查找,但我不在乎它是有序的还是无序的。它只需要快速。例如,我想将一堆std::vector对象存储在一个带有int和void*的映射中查找键。int和void*都必须匹配才能检索我的vector。这样的容器已经存在了吗?还是我必须自己动手?如果是这样,我该如何实现?我一直在尝试将一个boost::unordered_map存储在另一个boost::unordered_map中,但我还没有用这种方法取得任何成功。如果没有更简单的方法,也许我会继续使用Pershing这种方法。 最佳答案
我使用了搜索,但没有找到令我满意的答案...所以...这是一段代码://VoteContainer.htypedefuint32_torder_id_t;typedefintdriver_id_t;classVote{public:enumDriverVoteResponse{YES,NO,TIMEOUT};structDriverResponse{driver_id_tdriver_id;time_ttime;DriverVoteResponseresponse;};Vote():m_order_id(0),m_time_until(0){};Vote(order_id_tinOrd
我有一个要放入map中的值类型。它有一个很好的默认复制构造函数,但没有默认构造函数。我相信只要我远离使用operator[]一切都会好的。但是我最终得到了像这样的非常丑陋的构造来实际插入一个对象。(我认为如果该键已经有一个值,插入就会失败)。//equivalenttom[5]=xbutwithoutdefaultconstructionstd::map::iteratorit=m.find(5);if(it!=m.end()){m->second=x;}else{m->insert(std::make_pair(5,x));}我相信这会扫描两次map,而且看起来也很丑。有没有更简洁/
这个问题在这里已经有了答案:Howtocreateclassobjectsdynamically?(3个答案)关闭7年前。我已经编写了一个非常基本的表达式解析器,我希望它是可扩展的,以便它可以解析用户定义的表达式类型。例如,如果在解析时遇到字符,我想创建一个用于解析以此字符开头的表达式的类的实例。我有两个问题:如何将字符关联到静态方法指针?我想使用一个静态方法来返回类的一个新实例,因为我无法获得指向类构造函数的指针。以下语法可能是错误的,但这就是想法:typedefstaticIValue*(*returnPtrIValue)();map...假设我有A类,B类扩展了A类,我可以初始化
目前,我在vector中有一些数据。目前,我想将vector转换为map。所以它会组织如下(N是偶数)。vector:元素1、元素2、元素3、元素4...元素N。map:key1:元素1,value1:元素2,key2:元素3value2:元素4...目前,我只是枚举vector,有没有其他优雅的方式来做到这一点。C++11是首选。谢谢。for(intx=0;x 最佳答案 您的代码有效(注意MichaelJ的建议,如果有奇数则不处理最后一个元素)。有一点可以改进。调用map[vec[x]]使用value_type的默认构造函数构造一
具有值类型为引用C++11的unordered_map是否合法?例如std::unordered_map我已经设法让它与VS2013一起编译,但是我不确定它是否应该这样做,因为它会导致一些奇怪的运行时错误。例如vectorsubscriptoutofrange尝试erase时抛出一个元素。一些谷歌搜索结果发现你不能有一个引用vector,但我找不到任何关于unordered_map的信息。更新进一步的实验表明vectorsubscriptoutofrange与引用的unordered_map无关,因为它是我代码中的错误。 最佳答案
我想知道是否可以使用模板作为map的键。例如:std::map,Node>nodes;本质上,我想要做的是能够拥有一堆包含任意类型数据的节点,并以该数据为键。我想我可以通过将所述数据转换为二进制并以此为键来实现,但这很麻烦,我想避免它。澄清一下,我希望能够使用任何类型的变量作为键。例如,如果我有2个节点,一个包含一个int作为其数据,另一个包含一个Foo作为其数据,我希望能够使用它们的数据作为键将它们放在同一个映射中。也许map不是我想要的,我不确定...想法?谢谢! 最佳答案 如果您没有明确禁用RTTI,请参阅nogard的回答。
我有一个map>在我的EntityRepresentation类(class)。我有点想为表示创建一个Builder类,但我必须考虑复制map的成本。EntityState复制起来很便宜,因为它只是静态函数的集合;boost::weak_ptr复制也很便宜。整个map怎么样? 最佳答案 不要过早优化。在许多情况下,构建器类的运行时性能不会成为瓶颈。一般来说,复制一张map的复杂度是O(n)。从评论看来,n很小。如果您已经确定您确实需要优化,那么在这种情况下,使用两个vector在访问项目和复制方面都会更便宜。
以下代码可以使用gcc-4.5.1编译,但不能在VisualStudio11中编译。#include#includetypedefstd::pair>pairus;intmain(){std::map>x;std::arraytroll={1,2,3,4};x.insert(pairus(1,troll));autoz=x[1];}1现在映射到std::arraytroll.插入效果很好,程序可以编译。但是,一旦我尝试autoz=x[1]->因此试图获得1的数组troll被映射到,程序不编译并出现以下错误:errorC2512:'std::array::array':没有合适的默认构造
我想将两种(不是更多)不同的数据类型作为值放入映射中,如下例所示:typeXA,B,...;typeYZ,Y,...;voidfunc(typeX){...}voidfunc(typeY){...}std::mapmap;map["a"]=A;map["z"]=Z;...std::vectorlist;//Thislistwillbesomethinglike"a","y",...for(unsignedinti=0;i显然这是行不通的,因为map只接受一种数据类型的值。但是,当遍历list时,对func()的调用应该是明确的,因为map[list[i]]的类型是已知的.我想避免显式转