自定义比较器如何工作

how does custom comparator works exactly

给定 std::map< int, int, std::greater<int> > m;

默认情况下,插入地图的项目按升序排序。 通过上面的定义,我明白了我们可以将排序顺序更改为降序。

我想知道自定义比较器的具体工作原理。例如,什么时候检查这个参数,或者这个参数在地图实现中的确切位置被使用?

map 相关联。因此,它由 key/value 对组成。为了在地图中插入一对新的或找到现有的一对,程序必须能够将请求中的 keykey[=44= 进行比较]s 存在于地图中。为此,使用了比较器。 stl 为您提供了一些标准比较器,如 lessgreaterless_equalsgreater_equal。它们为 'map' 提供了一个通用接口,以便在 key[ 对上使用和执行 <><=>= 操作=44=]s。因此,在 'map' 操作期间,使用 2 个键调用比较器的 operator() 来比较它们。

默认比较器是'less'。因此,在您的情况下,如果第一个 int key 小于第二个 int,比较器将 return 为真。这将保证地图中对的特定插入顺序。如果您显式使用 'greater' 比较器,它将在上述情况下 return 'false' 并且会更改插入元素的顺序。

您还可以考虑排序列表或数组,其中每个前一个元素都比第二个元素 less。如果您将用于排序的 comarator 更改为 greater,则排序后的数组将被反转。

您也可以创建自定义比较器并执行一些不同类型的比较操作。

一般来说,简单类型可能需要自定义比较器,例如 int、char *、... 如果您将对象用作 'key' 元素,则只需重载 operator< ,如果 less 比较器正在使用中。