自定义比较器如何工作
how does custom comparator works exactly
给定 std::map< int, int, std::greater<int> > m;
默认情况下,插入地图的项目按升序排序。
通过上面的定义,我明白了我们可以将排序顺序更改为降序。
我想知道自定义比较器的具体工作原理。例如,什么时候检查这个参数,或者这个参数在地图实现中的确切位置被使用?
map
将 键 与 值 相关联。因此,它由 key/value 对组成。为了在地图中插入一对新的或找到现有的一对,程序必须能够将请求中的 key 与 key[=44= 进行比较]s 存在于地图中。为此,使用了比较器。 stl 为您提供了一些标准比较器,如 less
、greater
、less_equals
、greater_equal
。它们为 'map' 提供了一个通用接口,以便在 key[ 对上使用和执行 <
、>
、<=
、>=
操作=44=]s。因此,在 'map' 操作期间,使用 2 个键调用比较器的 operator()
来比较它们。
默认比较器是'less'。因此,在您的情况下,如果第一个 int key 小于第二个 int,比较器将 return 为真键。这将保证地图中对的特定插入顺序。如果您显式使用 'greater' 比较器,它将在上述情况下 return 'false' 并且会更改插入元素的顺序。
您还可以考虑排序列表或数组,其中每个前一个元素都比第二个元素 less
。如果您将用于排序的 comarator 更改为 greater
,则排序后的数组将被反转。
您也可以创建自定义比较器并执行一些不同类型的比较操作。
一般来说,简单类型可能需要自定义比较器,例如 int、char *、... 如果您将对象用作 'key' 元素,则只需重载 operator<
,如果 less
比较器正在使用中。
给定 std::map< int, int, std::greater<int> > m;
默认情况下,插入地图的项目按升序排序。 通过上面的定义,我明白了我们可以将排序顺序更改为降序。
我想知道自定义比较器的具体工作原理。例如,什么时候检查这个参数,或者这个参数在地图实现中的确切位置被使用?
map
将 键 与 值 相关联。因此,它由 key/value 对组成。为了在地图中插入一对新的或找到现有的一对,程序必须能够将请求中的 key 与 key[=44= 进行比较]s 存在于地图中。为此,使用了比较器。 stl 为您提供了一些标准比较器,如 less
、greater
、less_equals
、greater_equal
。它们为 'map' 提供了一个通用接口,以便在 key[ 对上使用和执行 <
、>
、<=
、>=
操作=44=]s。因此,在 'map' 操作期间,使用 2 个键调用比较器的 operator()
来比较它们。
默认比较器是'less'。因此,在您的情况下,如果第一个 int key 小于第二个 int,比较器将 return 为真键。这将保证地图中对的特定插入顺序。如果您显式使用 'greater' 比较器,它将在上述情况下 return 'false' 并且会更改插入元素的顺序。
您还可以考虑排序列表或数组,其中每个前一个元素都比第二个元素 less
。如果您将用于排序的 comarator 更改为 greater
,则排序后的数组将被反转。
您也可以创建自定义比较器并执行一些不同类型的比较操作。
一般来说,简单类型可能需要自定义比较器,例如 int、char *、... 如果您将对象用作 'key' 元素,则只需重载 operator<
,如果 less
比较器正在使用中。