在C++std::map中,有什么方法可以在给定映射值的情况下搜索键?示例:我有这张map:mapmyMap;myMap[0]="foo";在给定值"foo"的情况下,有什么方法可以找到相应的int吗?cout 最佳答案 std::map不提供(快速)查找给定值的键的方法。你想要的通常被称为“双射映射”,或简称“双映射”。Boosthassuchadatastructure.这通常是通过使用“粘合”在一起的两个索引树来实现的(其中std::map只有一个用于键)。Boostalsoprovidesthemoregeneralmult
我有一个名为Shape的类和一个ShapeStorage类。ShapeStorage类有一个map...std::mapshapes;还有一个函数...Shape*ReturnShapePointer(intkey){Shape*shape=shapes[key];shapes.erase(key);returnshape;}我的目标是能够让我的主类实例化一个ShapeStorage对象,将一些Shape*存储在形状图中。然后稍后我想从我的map中删除它,但不删除值本身。我希望我的主类仍然能够访问该值。我已经尝试过,我的指针仍然返回正确的值,但我担心因为当我从我的map中删除指针时正在
我试过但未能使以下与std::algorithms一起使用:我有一个std::mapcache和一个std::setselected_items我想从cache中删除键/值对,除了包含在selected_items中的键.这是我在没有算法的情况下写的://Thiscouldreallybewrittenbetterwithstd::algorithmsbuttime...//Deleteoldfor(autopair=cache.begin();pair!=cache.end();){if(selected_items.find(pair->first)==selected_items
我有自己的对象classmy_object{intid;boolstate;stringname;stringvendor;}我想将我的对象存储到两个map中以供足够快的引用。std::mapmap1;std::mapmap2;最后,我想检查两个映射中是否存在我的对象的某些键:for(eachmy_objectm1inmap1andmy_objectm2inmap2havethesamekey)//forexample,key"Bob"havecorrespondingobjectsinmap1andmap2{if(m1.vendor==m2.vendor){//dosomework}
假设我们有一个数据结构,它是一个键值映射,其中键本身也是一个键值映射。例如:map>,string>现在,假设我们要查询此映射中与键的键值的某个子集匹配的所有顶级键/值。示例:map={{"k1":"v1","k2:"v2"}:"value1",{"k1":"v3","k2:"v4"}:"value2",{"k1":"v1","k2:"v5"}:"value3"}我们的查询是“给我所有键值,其中键包含{"k1":"v1"},它会返回第一个和第三个值。类似地,查询{"k1":"v3","k2":"v4"}将返回同时具有k1=v3和k2=v4的所有键值>,产生第二个值。显然我们可以在每个查
我正在尝试使用映射在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(
我有一个multimap我想知道某个特定键是否最多一次出现在map中。我知道我可以打电话multimap.equal_range(key)在包含key的范围的开始和结束处找到一个迭代器但我想知道range.first之间是否只有一个元素和range.second.有没有比增加range.first更好的方法?查看它是否等于range.end的值?自multimap::iterator是双向的,撤消增量并不是什么大不了的事情,但这样做似乎很草率。 最佳答案 你能检查一下std::multimap::count(key)是否是==1?
map::insert(iteratorposition,constvalue&k)的效率可以通过在参数位置提供适当的值来显着改善。如果我使用整数作为键,并且每次插入都使用比之前插入的所有键都大的数字完成,我可以加快::insert的速度吗?给出::end()时的操作map的迭代器?类似于:myMap.insert(myMap.end(),make_pair(next_number,myValue));哪里myMap类型为map和next_number是一个每次递增的大整数。编辑:这个问题的答案可能会有所不同,具体取决于数据是否存储在map中。密集与否(见下面的讨论)。所以,让我们从两
我正在迭代C++映射。假设我想获取map中除前2个之外的键。键在map中排序。因此我想到了使用这样的东西:maptable;for(autoi=table.begin()+2;i!=table.end();i++)coutfirstsecond虽然这适用于vector,但由于未为map实现“+”运算符,它会在map上引发错误。实现结果的一种方法是:autoi=table.begin();intcount=0;while(countfirstsecond有没有其他有效的方法来实现这个? 最佳答案 它并没有提高效率,但也许更容易阅读fo
我想定义类似的东西MapmyMap;上面的声明被c++编译器接受并且没有错误抛出但是当我做这样的事情时intmain(){chararr[5]="sdf";mapmyMap;myMap.insert(pair(0,arr));return0;}我得到的错误是:Infileincludedfrom/usr/include/c++/4.6/bits/stl_algobase.h:65:0,from/usr/include/c++/4.6/bits/char_traits.h:41,from/usr/include/c++/4.6/ios:41,from/usr/include/c++/4.