STL漫谈

  从现在开始,想写一个关于STL工具的各种tip类的东西,记录下那些细节,以免以后使用STL工具时出错。

  1.关于map,如果需要第一个键值需要放进一个结构体,那么结构体是需要写好其自定义的排序规则的,这一点不妨和set作比较,因为它们的实现方法都是树,为了维持其内部树的结构来实现高效的使用,必须定义好自己的排序规则(尽管可能我把一个结构体放在map中第一个位置我并不需要它排序)。那么把结构体放在map的第二个位置需要定义好结构体的排序规则么?答案是不需要。不过写个排序规则也并不是难事,能写好就直接写好呗。(要说明的是,我上面的表述可能并不准确,map是以Key-Value这样的结构储存的,所以我上面所讲的第一个位置指的是键值Key,第二个位置指的是值Value。)

  2.对于第一点,还有一个拓展的地方,要把结构体丢进set或者map等容器里面,必须把排序规则写好之外,还必须把这个规则写完整,不然会出错。举个例子,一个边的结构体,有两个元素u和v,如果我们只是定义了这样的规则:

  return u<temp.u;

那么如果u相同就会被认为是相同的两个边变量。因此我们必须写完整,如下:

  return u == temp.u ? v<temp.v : u<temp.u;

尽管可能这个比较规则对我们来说并不重要,我们只是需要set的判重而已=。=

原文地址:https://www.cnblogs.com/zzyDS/p/5706121.html