C++ 重载容器比较符的坑
C++17及以上的重载
今天 CF 炸了半天,好不容易好了一会儿,一交结果 CE 了:
struct cmp{
bool operator ()(int x,int y){
return t[x]<t[y];
}
};
multiset<int,cmp>q,qq;
C++14 能编译通过,但 CF 只支持 C++17 及以上。
搜了一下,C++17 及以上应该这么写:
struct cmp{
bool operator ()(int x,int y)const{
return t[x]<t[y];
}
};
multiset<int,cmp>q,qq;
这东西在 C++14 中也能用。
只有再等到不知道过久之后 CF 再不炸了……
关于比较函数
无论如何都不能出现 \(a \neq b\) 时 \(a\ op\ b\) 和 \(b\ op\ a\) 同时成立的情况!不然删 \(a\) 的时候 \(b\) 也会被一起删(至少说 multiset 如此)!

浙公网安备 33010602011771号