了解C++中的自定义比较器


static bool cmp(string &a,string &b)
{
if(a.size()==b.size())
{
return a<b;
}
return a.size()<b.size();
}

这是一个自定义比较器,用于比较由大数字组成的两个字符串,如"0";3922〃;以及";12929〃;,并将它们进行比较,看看哪个更大。但是,我不明白为什么当a.size() == b.size()返回a < b

只有当两个字符串的大小相同时,才会执行if语句。(即"232"等于"934"。但它不会对类似字符串的("2342","234242")执行。

在if语句中,比较的是字符串,而不是整数。因此,如果要比较整数,请先对其进行转换。

标准库中的常见算法,如std::lower_boundstd::sort,只使用一个比较函数来提供a < b的结果,这足以进行所有其他比较(例如,如果他们需要测试相等性,他们可以进行!(a < b || b < a))。

如果这个自定义函数没有检查字符串的长度;1000〃;将在";50〃;按照字典顺序,这就是std::stringoperator<(...)所使用的(以及当它们的长度相等时在该函数中使用的)。