首页 >后端开发 >C++ >透明比较器如何在 C 关联容器中启用异构查找?

透明比较器如何在 C 关联容器中启用异构查找?

DDD
DDD原创
2024-12-23 02:55:13113浏览

How Do Transparent Comparators Enable Heterogeneous Lookup in C   Associative Containers?

C 关联容器的透明比较器

理解透明比较器的概念

C 语言14、关联容器引入了一个新概念,称为“透明”比较器。”根据标准,成员函数模板 find、count、lower_bound、upper_bound 和 equal_range 仅当类型 Compare::is_transparent 存在时才参与重载解析。

透明比较器是定义嵌套 is_transparent 的类型类型。此类型向关联容器发出信号,表明它应该认为比较器对于异构查找是透明的。因此,容器现在可以在容器的键类型和与该键类型可比较的不同类型之间进行比较。

透明比较器的好处

透明比较器解决关联容器中的异构查找问题。传统上,只能使用与容器的密钥类型相同类型的密钥来搜索容器。使用透明比较器,可以使用与键类型可比较但不一定是同一类型的值来搜索容器。

实现透明比较器

C 14 提供了一个名为 less 的库模板,可用于定义透明比较器。 less 模板有一个默认实现,专门用于 void 并允许比较任何类型。通过指定 std::less(其中 Cmp 是透明比较器),关联容器可以启用异构查找。

对标准容器的影响

简介仅当使用透明比较器时,透明比较器的数量才会更改关联容器的行为。默认情况下,容器保留其原始行为。当使用透明比较器时,例如 std::less,容器获得执行异构查找的能力。

在提供的示例中,std::set ;>将有一个透明的比较器,允许异构查找,而 std::set> 则可以。不会。

以上是透明比较器如何在 C 关联容器中启用异构查找?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn