std::set 存入指针、结构体的排序
set的类模板如下:
template<typename _Key, typename _Compare = std::less<_Key>,
typename _Alloc = std::allocator<_Key> >
默认采用std::less进行排序,但对于想要按照指针或结构体内某个元素进行排序,并不会生效
运算符重载
class Compare{
public:
bool operator() (const Worker& worker1, const Worker& worker2)
{
return worker1.cnt < worker2.cnt;
}
};
Note:重载需要遵守严格弱序的方式,如下所示
// worker1 < worker2
worker1.cnt < worker2.cnt
// worker2 < worker1
worker2.cnt < worker1.cnt
// worker1 == worker2
!(work1.cnt < worker2.cnt) && !(worker2.cnt < worker1.cnt)
如有worker1.cnt <= worker2.cnt的形式出现,会出现非预期行为。例如,再次插入相同元素会被识别为不同元素。