【发布时间】:2010-08-16 22:38:28
【问题描述】:
我正在使用 std::map。有时我会做这样的操作:找到所有项目的中值。例如 如果我添加
1 "s"
2 "sdf"
3 "sdfb"
4 "njw"
5 "loo"
那么中位数是3。
有没有不迭代地图中一半以上项目的解决方案?
【问题讨论】:
-
地图中有多少元素?您需要多久检索一次中位数?如果第一个或第二个答案是小数字,则只需使用
std::advance( m.begin(), m.size()/2 )。按顺序迭代地图的成本是线性的,因此需要O(N)操作。每次手术都相对便宜。