关于C++使用STLset自定义数据类型的排序时产生的编译错误,应该如何解决

关于C++使用STLset自定义数据类型的排序时产生的编译错误,应该如何解决。

#include<iostream>
#include<map>
#include<string>
using namespace std;

class Person
{
public:
    Person(string name, int age) :m_Name(name), m_Age(age) {}//传入参数列表的构造函数
    string m_Name;
    int m_Age;

};

class MyCompare
{
public:
    bool operator()(Person& p1, Person& p2)const
    {
        return p1.m_Age > p2.m_Age;//逆序排序
    }
};

int main()
{
    map <Person, int, MyCompare>m;

    Person p1("aaa", 40);
    Person p2("bbb", 30);
    Person p3("ccc", 20);
    Person p4("ddd", 15);
    
    m[p1] = 0;
    m.insert(pair<Person, int>(p2, 0));
    m.insert(map<Person, int>::value_type(p3, 0));
    m.insert(make_pair(p4, 0));
    system("pause");
    return 0;
}

应该是编译器防护加的比较好吧。

img