我在地图中使用字符串作为键值并尝试自定义比较函数。当我通过比较字符串的长度来自定义比较函数时,映射无法告诉具有相同大小的不同字符串。代码如下:
class Solution {
public:
int findLUSlength(vector<string>& strs) {
if(strs.size() < 2) return -1;
auto cmpByStringLength = [](const string &s1, const string &s2)->bool
{
return s1.size() < s2.size();
};
map<string, int, decltype(cmpByStringLength)> mpstringcount(cmpByStringLength);
for(int i = 0; i < strs.size(); i++)
mpstringcount[strs[i]]++;
for(auto itmp = mpstringcount.begin(); itmp != mpstringcount.end(); itmp++)
{
cout << "itmp->first: " << itmp->first << endl;
}
return -1;
}
};
如果我的输入结果为["aba","cdc","eae","abcd"]
,则代码只会输出:"abcd"
和"aba"
。
答案 0 :(得分:2)
地图无法告诉具有相同大小的不同字符串。
请注意,提供给std::map的比较器不仅用于排序,还用于相等检查。
标准库的每个地方都使用Compare概念,唯一性 通过使用等价关系来确定。不精确的说, 两个对象a和b被认为是等价的(不唯一) 比较少:
!comp(a, b) && !comp(b, a)
。
std::map存储具有唯一键的元素。您的比较仿函数会根据长度对string
进行比较,然后对于长度相同的string
,只会存储其中一个。map<string, int, decltype(cmpByStringLength)>
。从"aba"
,"cdc"
,"eae"
,string
的角度来看,code
就是一样。