目前,我在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]]的类型是已知的.我想避免显式转
boost::hash具有适用于大多数内置类型(包括容器)的哈希函数。但如boost::hash_rangefunctiondescription中所述,范围的哈希算法issensitivetotheorderoftheelementssoitwouldn'tbeappropriatetousethiswithanunorderedcontainer因此,std::unordered_map和boost::unordered_map都没有boost::hash特化。问题是:是否有一种“简单有效”的方法来散列unordered_map而无需从头开始重新实现散列算法?
我想将比赛结果保存在某个容器中。对于每场比赛,我都需要存储球员姓名和分数。例如:map["player1:player2"]={2,4};我不仅想通过键"player1:player2"从这个容器中检索,甚至通过反向键"player2:player1"我想得到相反的结果。我将要使用std::map并围绕它做一些智能包装。也许有一些使用自定义比较器、自定义检索和保存功能的技巧。std::map是一个不错的选择还是其他更好的选择?编辑:我将这些评论总结成如下所示的解决方案:structMatch{std::stringplayer1;std::stringplayer2;intpoints
我有一个C++11程序,它执行一些计算并使用std::unordered_map来缓存这些计算的结果。该程序使用多个线程,它们使用共享的unordered_map来存储和共享计算结果。基于我对unordered_map和STL容器规范的阅读,以及unordered_mapthreadsafety,似乎一个unordered_map,被多个线程共享,一次可以处理一个线程写入,但是一次可以处理多个读取器。因此,我使用std::mutex来包装我对map的insert()调用,这样最多只有一个线程插入时间。但是,我的find()调用没有互斥锁,因为从我的阅读来看,似乎许多线程应该能够同时读取
如果std::unordered_map的两个键具有相同的哈希值,标准是否保证它们将进入同一个桶?根据模板相等谓词,我们假设键不相等,它们仅具有相同的哈希值。奖励问题:如果相同的散列并不意味着相同的桶,那么能够单独遍历桶的目的是什么? 最佳答案 具有相同哈希值的对象被无序关联容器放入同一个桶中。因此,两个相等的对象必须具有相同的哈希值。23.2.5第8段:Theelementsofanunorderedassociativecontainerareorganizedintobuckets.Keyswiththesamehashcod