草庐IT

map_coordinates

全部标签

C++ std::map,键的旋转

我需要在map中实现类似“第一键轮换”的功能。对问题的更详细的解释。有一张map:std::maptest;插入了以下元素:test[0.5]=15;test[1]=20;test[2.3]=12;test[3.7]=18旋转算法可以重写为:a]记住map中的第一个元素(key最低的元素):rem_el=map[0]//记法b]从map中删除第一个元素c]为map中所有剩余元素设置新键:map[i].key=map[i].key-rem_el.keyd]使用新键将记住的键添加到map:最后一个键和记住的键的总和test[rem_el.key+test[n-1].key]=rem_el.

c++ - 从 map 容器中查找第一个大于用户指定值的值

我有一个map容器。如何使用find_if返回第一个大于用户指定搜索值的值,如下所示:std::map::iteratorit=find_if(Mymap.begin(),Mymap.end(),......非常感谢! 最佳答案 您确定要通过容器对任何值大于您的条件的项目进行线性搜索吗?最好还保留一个可以调用upper_bound的排序值的单独索引,以对数时间执行而不是元素数量的线性执行。或者查看boost::multi_index。 关于c++-从map容器中查找第一个大于用户指定值的

c++ - 错误 : no match for ‘operator<’ in ‘__x < __y’ when trying to insert in two map

在代码中有两个映射。一个存储对和另一个存储,其中值是具有5个变量的类,数据类型为字符串、整数、字符串、整数、整数。但是在插入第二个映射期间,我收到错误g++错误:尝试在map中插入时,'__x如何解决。classValues{private:std::stringC_addr;intC_port;std::stringS_addr;intS_port;intC_ID;public:Values(std::string,int,std::string,int,int);voidprintValues();};Values::Values(std::stringCaddr,intCport

c++ - 为 std::unordered_map 中的 const std::reference_wrapper 重载 operator==

我不知道如何使用std::reference_wrapper将std::string引用获取到std::unordered_map中>。根据以下链接,我知道我需要重载operator==。Whycantemplateinstancesnotbededucedin`std::reference_wrapper`s?但是,我不知道如何编写operator==以使其采用conststd::reference_wrapper。如果包装器不是const,那将不是问题。使用char而不是std::string效果很好(不需要重载operator==)。代码:#include#include#inc

c++ - map 中过期的 weak_ptr 会发生什么

我想了解weak_ptr已过期的映射中的条目(类型为boost::weak_ptr)会发生什么。map中的相应条目是否会自动删除?键是一个整数,对应的值是一个weak_ptr。我写的示例代码,但无法编译#include#include#includeusingnamespacestd;classFoo:publicboost::enable_shared_from_this{public:Foo(intn=0):bar(n){std::coutinc_ref(){returnshared_from_this();}private:intbar;};std::map>mappy;intm

c++ - 接收通用 map 作为参数的模板函数

在很多情况下,我们希望对完全相同的std::map或std::unordered_map执行一些操作,独立于map的类型。让我们考虑以下示例:#include#include#includetemplateclassContainer>voidprintMap(ContainerinputMap,booladditionalParam=false){for(constpairp:inputMap)coutmap1;map1.emplace(a,b);unordered_mapmap2;map2.emplace(a,b);printMap(map1);printMap(map2);ret

c++ - 大条目的慢 std::map

我们有48,16,703个这种格式的条目。1abc2def......4816702blah4816703blah_blah由于条目的数量很大,我担心std::map在插入期间会花费很多时间,因为它需要为每次插入做平衡。仅将这些条目插入map会花费大量时间。我在做map[first]=second;两个问题:1.我在这种情况下使用std::map是否正确?2.我按上面的方式插入是否正确。或者我应该使用map.insert()很抱歉没有做实验并写下绝对数字,但我们希望就我们做的事情是否正确达成普遍共识。此外,它们的键并不总是连续的..附言当然,稍后我们还需要访问该映射以获取与键对应的值。

c++ - std::list 和 std::map 的通用算法?

我有一个感兴趣的类(称之为X)。我有一个std::list(称之为L)。我有一个函数(称之为F)。F(L)根据检查列表中每个X的内部状态的算法返回L的一个子集(一个std::list)。我正在向我的应用程序添加一个std::map(称之为M),我需要定义F(M)以与F(L)相同的方式运行——即也就是说,F(M)也必须返回一个std::list,这是通过检查映射中每个X的内部状态来确定的。作为一个自称懒惰的程序员,我立即看到算法将[逻辑上]相同,并且每种数据类型(std::list和std::map)都是可迭代的模板。我不想两次维护相同的算法,但我不确定如何前进。一种方法是从F(M)中获

c++ - 删除 std::map (Visual C++)

我有一个指向我试图删除的map的指针(这个map是用新分配的)。我认为这张map是有效的,当我在调试时将鼠标悬停在它上面时,它显示pMap:[0]()..当我尝试删除这个空map时,我的应用程序就退出了,我得到一个First-chanceexceptionat0xsomelocationinmyapp.exe:0xsomenumber:Theobjectinvokedhasdisconnectedfromitsclients.在输出窗口中。这是什么意思?谢谢..编辑:这是一些示例代码:typedefmapmyMap;typedefvectormyMapStack;StructB有一个重

c++ - map<T,T>::iterator 作为参数类型

我有一个带有私有(private)映射成员的模板类templateclassMyClass{public:MyClass(){}private:std::mapmyMap;}我想创建一个接受映射迭代器的私有(private)方法voidMyFunction(std::map::iterator&myIter){....}但是,这会出现编译错误:标识符“迭代器”。我不需要传递一个抽象迭代器,因为MyFunction知道它是一个映射迭代器(并且只会用作myMap的交互器)并且会这样对待它(访问和修改myIter->second)。将myIter->second传递给MyFunction是不