给定std::map< int, int, std::greater<int> > m;
默认情况下,插入到地图的项目按升序排序。 根据上面的定义,我理解我们可以将排序顺序更改为降序。
我想知道自定义比较器的工作原理。例如,何时检查此参数,或者在地图实现中确切使用此参数?
答案 0 :(得分:1)
map
将键与值相关联。因此,它由键 /值对组成。要在地图中插入新对或查找现有对,程序必须能够将请求中的键与存在于其中的键进行比较地图。因此使用比较器。 stl为您提供了一些标准比较器,例如less
,greater
,less_equals
,greater_equal
。它们为“地图”提供了一个通用界面,并对键对进行<
,>
,<=
,>=
操作。因此,在“map”操作期间,比较器的operator()
被调用2个键来比较它们。
默认比较器为'less'。因此,在您的情况下,如果第一个 int 键小于第二个 int 键,比较器将返回true 。这将保证在地图中插入对的特定顺序。如果明确使用'更大'比较器,它将在上面的情况下返回'false',它将改变元素的插入顺序。
您还可以考虑排序列表或数组,其中每个前一个元素都是less
而不是第二个元素。如果您将用于排序的共聚器更改为greater
,则排序的数组将被反转。
您也可以创建自定义比较器并执行一些不同类型的比较操作。
通常,简单类型可能需要自定义比较器,如int,char *,...如果使用对象作为“键”元素,则只需重载operator<
,如果{ {1}}比较器正在使用中。