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