草庐IT

c++ - std::map 发现在 C++ 中不起作用

这个问题在这里已经有了答案:Errortryingtofindconstchar*keyfromstd::map(2个答案)关闭6年前。我使用以下几行创建了一个HashMap和一个迭代器:std::mapmyCache;std::map::iteratormyCacheIterator;然后我使用下面的行插入到这张map中:myCache[anotherObject->getStringKey()]=newvaLueClass(anotherObj1->getIntAttr(),anotherObj1-->getIntAttr());然后,每当我尝试使用下面的行搜索此map或螺母中是否

c++ - 为什么 std::map 没有 insert(key &, value & v) 类型的插入函数

为什么std::map不支持如下插入:std::mapmap_int;voidinsert_map(obj1&key,obj2&val){map_int.insert(key,val);}我知道以上是不正确的。我想知道是什么阻止了这样设计插入功能。它比创建一对IMO更直观。 最佳答案 它叫做emplace():std::mapm;//usespair'stemplateconstructorm.emplace("d","ddd"); 关于c++-为什么std::map没有insert(k

c++ - 从多个嵌套的 unordered_map 中提取值的模板函数

假设我有一个嵌套的std::unordered_map,如下所示:std::unordered_map>我想要一个函数,它会根据两个键ResourceName和HAL::ResourceFormat::Color返回指向HAL::RTDescriptor的指针>如果对象存在,否则为nullptr。简单的实现如下所示:constHAL::RTDescriptor*ResourceDescriptorStorage::GetRTDescriptor(ResourceNameresourceName,HAL::ResourceFormat::Colorformat)const{automap

C++ 集合 : how to create a map like structure

什么样的收集方法会存储一对(键和值),其中键不是唯一的(我认为从技术上讲它不能成为键)?在我程序的某处我有:typedefstruct{intnKey;stringstrFormType;}KeyPair;然后我将使用此结构将对象存储在vector中。vectorvKeyList;KeyPairMenuOne;MenuOne.nKey=1;MenuOne.strFormType="Window";vKeyList.push_back(MenuOne);MenuOne.nKey=0;MenuOne.strFormType="Window2";vKeyList.push_back(Menu

c++ - 在 map 上使用 find_if 按值查找

我有一个有map的类(class)。我需要通过搜索特定值而不是键来在map中找到迭代器。使用成员函数谓词IsValueFound,正在尝试这个。classA{public:voidfindVal();private:intstate;mapexmap;boolIsValueFound(pairitr){returnstate==itr.second;}};voidA::findVal{itr=find_if(exmap.begin,exmap.end,mem_fun1_ref(&A::IsValueFound));}我遇到编译错误。我不确定这些函数适配器的语法是什么。请帮忙。编辑:抱歉

C++ 使用 std::map 计算实例/直方图

我见过类似下面的示例代码:std::strings="HelloWorld!";std::maph;for(std::string::const_iteratori=s.cbegin();i!=s.cend();++i){++h[*i];}assert(h['l']==3);这似乎依赖于在每个字母第一次出现时将值类型归零。即使使用像std::size_t这样没有默认构造函数将其重置为零的东西,也能保证这一点吗? 最佳答案 事实上,这就是map的工作原理:[]运算符正在发生变化,如果映射类型的对象不存在,它将创建然而。由于size_t

c++ - 映射值的地址

我有一个存储在std::map中的设置。例如,WorldTime键的值会更新每个主循环迭代。我不想在需要时从map上读取它(它也在每一帧进行处理),我认为它一点也不快。那么,我可以获取指向map值的指针并访问它吗?代码是:std::mapmSettings;//Somewhereincycle:mSettings["WorldTime"]+=10;//ms//Somewhereinanotherplace,alsocalledincycleDrawText(mSettings["WorldTime"]);//Isslowtocalleachframe所以这个想法是这样的:int*tim

C++ STL 映射 - 条件插入

我正在寻找一种执行条件插入的有效方法。理想情况下,我想要一个适用于任何map的模板函数。我想要这样的东西:std::mapMyMap;if(MyMap.ConditionalInsert(3,"Hello")){//therewasnoelement3,onehasbeenaddedwithvalue"Hello"}else{//therewasalreadyanelement3inthemap,it'sunchanged}我不能轻松地使用operator[]因为没有简单的方法来判断它是否创建了一个元素。我可以使用count进行测试,但是如果我们进行插入,我必须搜索map两次。我想使用

c++ - 如何处理带有指针的 map ?

假设我有一个名为People的类。我在map中存储指向这些人的指针mapmyMap;要创建新人,我使用maps[]运算符。myMap["dave"]->sayHello();但这给了我一个段错误,它甚至没有调用People类的构造函数。我也试过myMap.insert(std::make_pair("dave",newPeople()));但这并没有改变任何东西,构造函数仍然没有被调用,并且程序因段错误而关闭处理这段代码。如何访问和操作其中包含指针的map?为什么上面的方法不起作用,我没有收到编译时错误或警告。非常感谢任何见解,谢谢 最佳答案

c++ - 如何更改要反转的 std::map 的顺序?

有谁知道有什么方法可以将map顺序从“少”改为“多”吗?例如:有一个map称为test.我向其中插入一些条目:test["b"]=1;test["a"]=3;test["c"]=2;在map内部,顺序为(a,3)(b,1)(c,2).我希望它是(c,2)(b,1)(a,3).我怎样才能轻松做到这一点? 最佳答案 通过使用std::greater而不是std::less作为您的key。例如std::map>my_map;参见thereference 关于c++-如何更改要反转的std::m