[英]how does custom comparator works exactly
鉴于std::map< int, int, std::greater<int> > m;
默认情况下,插入到地图的项目按升序排序。 根据上面的定义,我明白我们可以将排序顺序更改为降序。
我想知道自定义比较器的工作原理。 例如,什么时候会检查这个参数,或者这个参数在地图实现中的确切位置?
该map
键与值相关联。 因此,它由键/值对组成。 为了插入地图中的一个新的一对或发现一个现有的,该程序必须能够比较来自与存在于地图中的密钥s的请求的密钥。 为此,使用比较器。 stl 为您提供了一些标准比较器,例如less
、 greater
、 less_equals
、 greater_equal
。 它们为 'map' 提供了一个通用接口,以便在键对上使用和执行<
、 >
、 <=
、 >=
操作。 因此,在“映射”操作期间,比较器的operator()
将使用 2 个键调用以进行比较。
默认比较器是“少”。 因此,在您的情况下,如果第一个int key小于第二个int key ,则比较器将返回 true 。 这将保证映射中对的特定插入顺序。 如果您明确使用 'greater' 比较器,则在上述情况下它将返回 'false',并且会更改元素插入的顺序。
您还可以考虑排序列表或数组,其中每个前一个元素都less
第二个元素。 如果您将用于排序的 comarator 更改为greater
则排序的数组将被反转。
您也可以创建自定义比较器并执行一些不同类型的比较操作。
一般而言,可能需要自定义比较简单的类型,如int,字符*,......如果你使用一个对象作为“钥匙”元素,你可以重载operator<
,如果less
比较正在使用中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.