jjzjj

c++ - 从 std::map 值获取键的有效方法

我有一张map如下:std::mapmapobj;mapobj["one"]=1;mapobj["two"]=2;mapobj["three"]=3;当输入为值时如何获取key例如:输入:1输出:一个注意:在我的例子中,值是唯一的 最佳答案 一对一映射实际上非常简单,最快的方法可能是维护两个映射,每个方向一个。如果它不是一对一的,它会变得更加复杂,因为您需要提供一种方法来获取值或键的集合,而不是单个值或键。幸运的是,您只有一对一的要求。其中一个映射是您现在拥有的映射,另一个映射会将值映射到给定的键,所以两者都是:std::mapfo

C++ std::map 或 std::set - 有效地插入重复项

我有一堆充满重复的数据,我想消除重复项。你知道,例如[1,1,3,5,5,5,7]变为[1,3,5,7]。看起来我可以使用std::map或std::set来处理这个问题。但是,我不确定(a)将所有值简单地插入容器中是否更快,或者(b)检查它们是否已经存在于容器中并且仅在不存在时才插入-插入是否非常有效?即使有更好的方法...您能建议一种快速的方法吗?另一个问题-如果我存储在其中的数据不像整数那样微不足道,而是一个自定义类,那么std::map如何设法正确存储(散列?)数据以便快速访问通过operator[]? 最佳答案 std::

c++ - 我的程序泄漏了 boost::shared_ptr 拥有的资源

我看不出为什么我的程序会泄漏,也许你能发现它。typedefboost::shared_ptrStringPtr;typedefstd::pairWMapPair;typedefstd::mapWindowMap;//thiscallbackpopulatestheWindowMap(m_Windows)byaddingaWMapPaireachtimeBOOLCALLBACKEnumWindowsCallback(HWNDhWnd){//addsthiswindowtotheWindowMap,alongwithitstitletextBOOLbRetVal=FALSE;intnTe

c++ - 制作一个以坐标为键的 std::map

创建一个以坐标为键的std::map似乎是不可能的。当两个坐标的(x+y+z)相同时,map将覆盖前一个。示例:map[Coordinate(1,0,0)]=object1;map[Coordinate(0,1,0)]=object2;map[Coordinate(0,0,1)]=object3;这将导致有一个包含1个元素的std::map,其中包含object3作为值和Coordinate(0,0,1)作为键。我怎样才能防止这种情况发生,以便它包含所有值?#pragmaoncestructCoordinate{doublex,y,z;Coordinate(doublex,double

c++ - 如何将已排序的 std::list of std::pair 转换为 std::map

我有一个std::list>,我知道这是根据std::stringelement排序的.因为我想做很多std::find_if基于std::string元素,我相信一个std::map与lower_bound和upper_bound会更合适。事实是我想insertstd::map中的元素以一种有效的方式。所以我想使用一个额外的迭代器来制作insert更快。我相信最简单的方法是使用const_reverse_iterator通过std::list并使用begin()的std::map.你会这样做吗,还是一个坏主意?谢谢! 最佳答案 如

c++ - 使用 braced-init 初始化 std::shared_ptr<std::map<>>

我有以下shared_ptr到map:std::shared_ptr>我想使用braced-init来初始化它。可能吗?我试过:std::strings1("temp");std::shared_ptr>foo=std::make_shared>(1000.0,s1);但是在使用Xcode6.3编译时出现以下错误:/usr/include/c++/v1/map:853:14:Candidateconstructornotviable:noknownconversionfrom'double'to'constkey_compare'(aka'conststd::__1::less')fo

c++ - 在 std::map 中使用(数学) vector

相关:whatcanIuseasstd::mapkeys?我需要创建一个映射,将空间中的特定关键位置映射到对象列表。std::map似乎是这样做的方法。所以我输入了std::map在xyz上VectorclassVector{floatx,y,z};,我正在制作std::map>.所以请注意这里的key不是std::vector,它是classVector的一个对象这只是我自己制作的数学xyzvector。为了产生“严格弱排序”,我为operator编写了以下重载:boolVector::operator=b.yreturnfalse;}}else{//z>=b.zreturnfals

c++ - 如何提高键类型为 std::string 的 map 查找的性能?

我正在使用std::map(VC++实现),通过map的find方法进行查找有点慢。键类型是std::string。我可以通过map的自定义键比较覆盖来提高此std::map查找的性能吗?例如,也许std::stringstring::size()比较?还有其他加快比较速度的想法吗?在我的情况下,map将始终包含更新:map包含文件路径。更新2:map的元素经常变化。 最佳答案 首先,关闭所有的性能分析和调试开关。这些会极大地减慢STL。如果不是这样,部分问题可能是字符串的前80-90%是相同的。这对map来说不一定是坏事,但它适用

c++ - 在 std::map 中查找具有给定前缀的键或在 std::set 中查找元素的优雅方法

我有map,其中的键是std::string。我想在map中找到那些以"DUPA/"前缀开头的元素。找到下界很容易,但上界有点问题。我写了这样一段代码:constchar*prefix="DUPA/";constchar*firstAfterPrefix="DUPA0";autoprefixedBeginIt=myMap.upper_bound(prefix);autoprefixedEndIt=myMap.lower_bound(firstAfterPrefix);代码工作正常,但我认为它不够优雅,因为必须知道0在ASCII表中位于/的第一个。第二种方法是复制前缀并增加最后一个符号。

c++ - 更正友元定义以授予 std::map 对私有(private)默认构造函数的访问权限

我正在开发一个使用结构的库,该结构不应具有该库用户可访问的默认构造函数。structExample{Example(intx);private:Example();};在库中,std::map需要默认构造函数来创建新条目。该库非常小心地在使用默认构造函数的任何地方实际放置值。库使用映射来存储这些结构,如下所示:std::mapdata;检查HEREFORACOMPLETEEXAMPLE在ideOne中。我想阻止库的用户使用默认构造函数。我如何与std::map、std::pair和/或std::tuple交friend以允许std::map使用此默认构造函数?friendclassst