具有类型“const mycompare”的表达式会丢失一些 const-volatile

#include<iostream>
using namespace std;

#include<set>

class mycompare
{
public:
    bool operator()(int v1, int v2)
    {
        return v1 > v2;
    }
};

void test01()
{
    set<int> s1;
    s1.insert(10);
    s1.insert(40);
    s1.insert(20);
    s1.insert(50);
    s1.insert(30);


    for (set<int>::iterator it = s1.begin(); it != s1.end(); it++)
    {
        cout << *it << " ";
    }

    cout << endl;

    set<int,mycompare> s2;
    s2.insert(10);
    s2.insert(40);
    s2.insert(20);
    s2.insert(50);
    s2.insert(30);

    for (set<int,mycompare>::iterator it = s2.begin(); it != s2.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;
}

int main()
{

    test01();
    
    system("pause");
    return 0;
}

第二段排序代码错误

bool operator()(const int &v1,const int& v2)const 为什么这样是正确的?