自定义映射比较器
在 C 中, std::map 使用比较器来排序其元素。默认情况下,映射使用小于运算符 (<) 来比较键。但是,可以通过提供自定义比较器来覆盖此默认行为。
此问题讨论如何自定义映射的比较器以按键的长度而不是按字母顺序对键进行排序。这是解决方案:
使用自定义类的解决方案
std::map 最多允许四个模板类型参数,第三个是比较器。以下是实现基于字符串长度的比较器的自定义类的示例:
<code class="cpp">struct cmpByStringLength { bool operator()(const std::string& a, const std::string& b) const { return a.length() < b.length(); } };
要使用此自定义比较器,请使用以下模板参数创建一个映射:
<code class="cpp">std::map<std::string, std::string, cmpByStringLength> myMap;</p> <p><strong>使用构造函数参数的解决方案</strong></p> <p>或者,您可以传递地图构造函数的比较器。此语法等效于上一个示例:</p> <pre class="brush:php;toolbar:false"><code class="cpp">std::map<std::string, std::string, cmpByStringLength> myMap(cmpByStringLength());</code>
注意: 按长度比较时,每个长度只能有一个字符串作为键出现在映射中。
以上是如何自定义 C 中映射的比较器以按键的长度对键进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!