停5s 2015-08-25 01:30 采纳率: 0%
浏览 2780
已采纳

关于 multiset 容器用法的疑问?问题来源于“找最小的k个数”

以下为“找最小k个数”中的一段代码,它使用了 multiset 容器,基于红黑树实现,
而这段算法的思想是 最大堆的思想,下面算法中 leastNumbers.begin() 应是指向最大值,这是为什么?
红黑树应是一颗二叉搜索树,为什么能保证 leastNumbers.begin() 指向最大值?

 typedef multiset<int, greater<int> >            intSet;
typedef multiset<int, greater<int> >::iterator  setIterator;

void GetLeastNumbers_Solution2(const vector<int>& data, intSet& leastNumbers, int k)
{
    leastNumbers.clear();

    if(k < 1 || data.size() < k)
        return;

    vector<int>::const_iterator iter = data.begin();
    for(; iter != data.end(); ++ iter)
    {
        if((leastNumbers.size()) < k)
            leastNumbers.insert(*iter);

        else
        {
            setIterator iterGreatest = leastNumbers.begin();

            if(*iter < *(leastNumbers.begin()))  // 为什么这里 begin() 指向最大值?
            {
                leastNumbers.erase(iterGreatest);
                leastNumbers.insert(*iter);
            }
        }
    }
}
  • 写回答

1条回答 默认 最新

  • oyljerry 2015-08-25 05:20
    关注

    typedef multiset > intSet;
    intSet设置了greater,插入的数据都是降序排序的。最大值为第一个

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 为什么我按照电路图做出的仿真和实物都不能使用
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
  • ¥15 算法题:数的划分,用记忆化DFS做WA求调
  • ¥15 chatglm-6b应用到django项目中,模型加载失败
  • ¥15 CreateBitmapFromWicBitmap内存释放问题。
  • ¥30 win c++ socket
  • ¥15 C# datagridview 栏位进度
  • ¥15 vue3页面el-table页面数据过多
  • ¥100 vue3中融入gRPC-web