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 如此)!

posted @ 2025-03-21 18:03  123asdf123  阅读(29)  评论(0)    收藏  举报