c++ 关于sort 函数的问题

错误 10 error C2676: 二进制“-”:“std::_Tree_const_iterator<_Mytree>”不定义该运算符或到预定义运算符可接收的类型的转换 d:\软件\vc\include\algorithm 3806 函数对象1
错误 11 error C2780: “void std::_Sort(_RanIt,_RanIt,_Diff)”: 应输入 3 个参数,却提供了 4 个 d:\软件\vc\include\algorithm 3806 函数对象1

 #include<iostream>
#include<set>
#include<algorithm>
#include<functional>
using namespace std;
int main()
{
    int a[]={1,2,1,3,4,5,8,7};
    set<int> b(a,a+8);
    cout<<b.size()<<endl;

    sort(b.begin(),b.end(),greater<int>());//请问这里有错嘛

    getchar();
    return 0;
}

你无法用STL里的sort算法对容器set作排序。set本身就是一种有序的容器。 set主要用于不常变动的数据,对其数据的变动,只能是删除旧的,然后再插入新的,这点从它的iterator就能看出来,它的iterator是const的。你可以在初始化set的时候,指定比较排序的方法,或者干脆把set转换为其它容器(比如vector),然后再排序。 但无法再装入原来的set,因为原来的set的排序方法已被固化了。

set不支持,换成vector