草庐IT

Map-side

全部标签

c++ - 为什么 std::map 没有 find/lower_bound 重载,std::list 没有 sort 重载?

我知道你不应该使用std::find(some_map.begin(),some_map.end())或std::lower_bound,因为它会采用线性时间而不是some_map.lower_bound提供的对数时间。std::list也会发生类似的事情:有用于排序的std::list::sort函数,但您无法调用std::sort(some_list.begin(),some_list.end()),因为迭代器不是随机访问的。但是,例如,std::swap具有标准容器的重载,因此swap(some_map,other_map)的调用需要O(1),而不是在)。为什么C++标准不为ma

c++ - 为什么 std::map 有一个 find 成员函数?

我和一位同事正在讨论成员职能与非成员职能的相对优点。一个问题出现了:为什么std::map有一个find成员函数。我的回答是,虽然您可以在map上使用std::find,但您必须搜索键值对,或者使用find_if和例如一个lambda。然而,这是线性的,map.find提供了比线性时间更好的按键搜索。我最后断言,如果它可能是非成员(member),那么它本来就是!(尽管std::string表明我的概括可能有些草率)。我的同事指出,可以使用map.lower_bound以与非成员函数相同的方式实现find。map.find成为成员(member)是否有理由?

c++ - map 的替代品

因为map不允许重复值。C++标准库中是否有任何其他容器允许通过键值对存储值的重复项? 最佳答案 您可以使用std::multimapMultimapisaSortedAssociativeContainerthatassociatesobjectsoftypeKeywithobjectsoftypeData.multimapisaPairAssociativeContainer,meaningthatitsvaluetypeispair.ItisalsoaMultipleAssociativeContainer,meaningth

c++ - 使用 const 参数调用 map::find

我有一个对象:mapcollection;我想调用map::find函数,但我的键值为const,如以下代码,无法编译:constA*a=whatever();collection.find(a);以下代码有效并执行与查找操作等效的操作:constA*a=whatever();map::iteratoriter;for(iter=collection.begin();iter!=collection.end();++iter)if(iter->first==a)break;//iternowcontainstheresultormap::end(justlikemap::find)但它

c++ - 计算 STL map 不相交子范围平均值的有效方法

我正在将算法从C#转换为C++。该算法的一小部分是计算字典中某些区域的平均值。字典中数据的存储方式如下:IndexValue11032829078111090我需要计算索引小于某个数字的所有值和大于某个数字的所有索引值的平均值。在C#中,我按以下方式进行:if(dictionary.Where(x=>x.Key0){avgValue=(int)dictionary.Where(x=>x.Keyx.Value);}for(vari=0;ix.Key>(rightBorder)).Count()>0){avgValue=(int)dictionary.Where(x=>x.Key>(rig

c++ - 被 const 逼入绝境:std::map::find() const 重载

考虑以下片段:#includeclassC{public:C(){}constint&f(constint&x)const{//Error:cannotcastconstint*toint*constreturnmyMap.find(&x)->second;//Withaconst_castworks://returnmyMap.find(const_cast(&x))->second;}std::mapmyMap;};int_tmain(intargc,_TCHAR*argv[]){intx=0;Cc;c.f(x);return0;}f()中的错误是由map的find()的const

c++ - 如何找到 map 的中间元素?? STL

您好,我在STL库/C++中的Map概念之间徘徊。intarr[]={10,15,14,13,17,15,16,12,18,10,29,24,35,36};intn=sizeofarr/sizeof*arr;mapbst;map::iteratorit;vectormedian_output;constintk=5;for(inti=0;i现在当我打印这张map时,它是按排序顺序打印的。现在有什么最简单的方法可以找到这张map的中间点.....需要找到更大问题的中位数...所以尝试实现平衡二叉搜索树.. 最佳答案 map是一棵平衡搜

c++ std将列表复制到 map

考虑以下几点:structA{inti;doubled;std::strings;};std::listlist_A;我想将list_A的所有元素复制到map中,这样map中的每一对都将包含list_A中的一个元素作为值,其字符串s作为键。有没有比遍历列表并将每个元素及其字符串作为键插入映射更优雅的方法? 最佳答案 我喜欢标准库算法和lambda,但它并没有比以下更简单:for(constA&value:list_A){map_A.insert(std::make_pair(value.s,value));}其他方法正在执行与此代码

c++ - 为什么 map 上的 BOOST_FOREACH 仅适用于 typedef

我试图通过map编写一个简单的循环元素,我想知道为什么我使用的第一种语法不起作用/无法编译?我写的第一个版本如下,它不能用VS'2008/boost版本1.44编译:std::mapmyMap;...BOOST_FOREACH(map::value_type&p,myMap){}现在,如果我像下面这样重写代码,编译就可以了,但为什么呢?typedefstd::mapmyMap_t;myMap_tmyMap;...BOOST_FOREACH(myMap_t::value_type&p,myMap){} 最佳答案 它是一个预处理器宏,它

C++:std::unordered_map 保证是基于节点的吗?

std::unordered_map的典型布局是什么??是K和V对象本身存储在存储桶中,还是存储桶存储指向包含键和值的节点的指针?我正在尝试弄清楚使用std::unordered_map对性能的影响与std::unordered_map.假设我只放置和查找值,是否有任何理由更喜欢后者,即使值非常大?我能想到的唯一原因是,如果值以内联方式存储在桶中,并且每次重新散列容器时都需要重新分配。标准中有什么保证不会发生这种情况吗? 最佳答案 [unord.req]/8:Rehashinginvalidatesiterators,changes