自定义比较器如何正常工作

时间:2017-09-26 23:34:09

标签: c++ stdmap

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

默认情况下,插入到地图的项目按升序排序。 根据上面的定义,我理解我们可以将排序顺序更改为降序。

我想知道自定义比较器的工作原理。例如,何时检查此参数,或者在地图实现中确切使用此参数?

1 个答案:

答案 0 :(得分:1)

map值相关联。因此,它由 /值对组成。要在地图中插入新对或查找现有对,程序必须能够将请求中的与存在于其中的进行比较地图。因此使用比较器。 stl为您提供了一些标准比较器,例如lessgreaterless_equalsgreater_equal。它们为“地图”提供了一个通用界面,并对对进行<><=>=操作。因此,在“map”操作期间,比较器的operator()被调用2个键来比较它们。

默认比较器为'less'。因此,在您的情况下,如果第一个 int 小于第二个 int ,比较器将返回true 。这将保证在地图中插入对的特定顺序。如果明确使用'更大'比较器,它将在上面的情况下返回'false',它将改变元素的插入顺序。

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

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

通常,简单类型可能需要自定义比较器,如int,char *,...如果使用对象作为“键”元素,则只需重载operator<,如果{ {1}}比较器正在使用中。