问题:
在练习map容器时,对其做自定义顺序排序时出现错误
环境:
Visual Studio 2019
错误:
C3848 具有类型“const MyCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool MyCompare::operator ()(int,int)”
代码:
#include<iostream>
#include<map>
using namespace std;
class MyCompare
{
public:
bool operator()(int v1, int v2)
{
return v1 > v2;
}
};
void test01()
{
map<int, int, MyCompare>m;
m.insert(make_pair(1, 10));
m.insert(make_pair(2, 20));
m.insert(make_pair(3, 30));
m.insert(make_pair(4, 40));
m.insert(make_pair(5, 50));
for (map<int, int, MyCompare>::iterator it = m.begin(); it != m.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
}
int main()
{
test01();
return 0;
}
解决:
于是打开百度搜索,在这篇文章中找到了解决办法
在仿函数中加入const
class MyCompare
{
public:
bool operator()(int v1, int v2) const
{
return v1 > v2;
}
};
然后就可正常运行
思考:
但是疑惑的地方在于,我这是按照老师所写代码敲出来的,为什么老师可以正常运行
右键显示错误帮助,看到微软给出的
然后我把代码拿到Code::Blocks中运行,发现没有错误,正常运行
个人理解应该是Visual Studio的编译器对此做出了更新,要求必须使用const限定。