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=#k

v总是增加吗?或者它的值会减小吗?
v
也会减小-它代表某种排序的运行平均值…@HarshilSharma
std::map
会自动排序!