程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c++容器-關於 multiset 容器用法的疑問?問題來源於“找最小的k個數”

c++容器-關於 multiset 容器用法的疑問?問題來源於“找最小的k個數”

編輯:編程綜合問答
關於 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);
            }
        }
    }
}

最佳回答:


typedef multiset > intSet;
intSet設置了greater,插入的數據都是降序排序的。最大值為第一個

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved