c++ 小技巧,set 重载比较函数
smwtcat
·
2022-09-13 09:38:55
·
个人记录
卧槽,我才发现 set 的重载运算符是可以另写一个 struct 的。具体来说(https://www.cnblogs.com/zhihaospace/p/12843802.html):
set 容器模版需要3个泛型参数,如下:
template
第一个T 是元素类型,必选;
第二个C 指定元素比较方式,缺省为 Less, 即使用 < 符号比较;
第三个A 指定空间分配对象,一般使用默认类型。
因此:
(1) 如果第2个泛型参数你使用默认值的话,你的自定义元素类型需要重载 < 运算操作;
(2)如果你第2个泛型参数不使用默认值的话,则比较对象必须具有 () 操作,即:
bool operator()(const T &a, const T &b)
也就是说可以,struct cmp{ bool operator() (int a, int b){ return id[a] < id[b]; } };,然后 set
卧槽这个太猛了啊。
顺便,priority_queue 也可以这么干。好像要写
c++ 内置的 less
然后还有有意思的事,虽然跟这个无关:set.insert() 是有返回值的,类型是 pair
2022.10.2 更新:
这个叫做仿函数,就是让一个 class 或者 struct 具有函数的特性,能像函数一样用。