C++ 最适合求最小值的数据结构
对于保存一组成对的C++ 最适合求最小值的数据结构,c++,data-structures,C++,Data Structures,对于保存一组成对的(k,v),我必须对v进行与查找具有最少v的元素相同数量的更新,最合适的数据结构是什么 我正在考虑将它们保存在映射中,并在每次插入新的一对时找到具有最小v的一对(添加的数量非常少…) 每次我都会更新v我会将它与“最小”对进行比较,如果它更小,我会更新“最小”对 我想有更好的解决办法吗 您的解决方案只考虑新值低于旧最小值的情况。 如果旧的最小值增加,它将失败,您必须找到新的最小值 我会保留两张地图: map<k,v> kKeyMap; multimap<v,&
(k,v)
,我必须对v
进行与查找具有最少v
的元素相同数量的更新,最合适的数据结构是什么
我正在考虑将它们保存在映射中,并在每次插入新的一对时找到具有最小v
的一对(添加的数量非常少…)
每次我都会更新v
我会将它与“最小”对进行比较,如果它更小,我会更新“最小”对
我想有更好的解决办法吗 您的解决方案只考虑新值低于旧最小值的情况。
如果旧的最小值增加,它将失败,您必须找到新的最小值
我会保留两张地图:
map<k,v> kKeyMap;
multimap<v,&k> vValueMap;
map-kKeyMap;
多重映射;
使用多重映射获得最低值(因为它可以处理具有相同v的多个k)。
与常规地图一样,它也是经过排序的,因此获取最低值只需获取地图中的第一项即可O(1)
每次更改时,您都会使用第一个映射(kKeyMap
)查找k,并更改值O(logn)
使用旧的v值从多重贴图中删除旧的(v,k)值,然后添加新的(v,k)值O(logn)
所以,您有O(1)查询用于lower,O(logn)查询用于insert。假设n=#kv总是增加吗?或者它的值会减小吗?v
也会减小-它代表某种排序的运行平均值…@HarshilSharmastd::map
会自动排序!