我正在尝试使用映射在C++中编写程序...我的目标是避免在map中重复相同的值。如果键相同,我们可以使用映射来避免键重复。为了允许重复键,我们使用多重映射。如果值相同,如何避免?我写的程序允许重复值:typedefstd::mapMyMap;intmain(){MyMapmap;MyMap::iteratormpIter;intkey;stringvalue;intcount;for(count=0;count>key;cin>>value;std::pairres=map.insert(std::make_pair(key,value));}for(mpIter=map.begin(
我想知道是否可以使用模板作为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在访问项目和复制方面都会更便宜。
我正在尝试使用C++创建一个通用容器类来处理多种数据类型。这是各种解决方案的常见问题,但我发现没有任何东西像我在Python甚至VB/VBA等语言中习惯的那样……直观……这是我的场景:我已经基于boost::any构建了一个DataContainer类,我用它来存储多个元素的多种数据类型。我使用声明为的map:std::map其中DataContainer是封装以下类型对象的类:std::list以及用于管理/访问列表的便捷功能。然而,最后,我还是被迫在数据容器之外进行类型转换。例如,如果我要在map中存储一个int值列表,访问它们需要:intvalue=boost::any_cast
以下代码可以使用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':没有合适的默认构造
有没有什么方法可以找到分配给C++中的映射的内存量/大小?有一个函数可以找到map的大小,即map中的条目数,但是内存有没有这样的方法。我有一张map(字符串,字符串)。sizeof()总是给我48的大小。为什么会这样?谢谢:) 最佳答案 不,没有。但是,对于支持.size方法的类,例如字符串或标准容器,您可以实现类似的功能:templateunsignedlongmapSize(conststd::map&map){unsignedlongsize=sizeof(map);for(typenamestd::map::const_i
我有一个包含3个字段的结构,两个ints(我们称它们为A和B)和bool(C)。我想创建一种该结构的数组,并能够通过任何键(A或B)访问它,得到孔对象(带有A、B和C)作为返回。我不需要做类似“获取bool为真的所有对象”之类的事情,如果这有什么不同的话。显然,两个键都是唯一的,而bool不能,但为了清楚起见,我想我会提到它。如果没有A或B,那将是一个简单的std::map.我目前看到的唯一解决方案是制作一个包含2set的包装器s和一个vector.有什么方法可以让我的生活更轻松吗?注意:它最多包含一百个元组,因此性能应该不是问题。线性访问是可以接受的。为了让它更清楚,这是我希望能够做
我想将两种(不是更多)不同的数据类型作为值放入映射中,如下例所示: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