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

关于 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,插入的数据都是降序排序的。最大值为第一个

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

报告相同问题?