invalid-comparator问题

std::set使用自定义key时,需要指定comparator,具体做法如下:

1
2
3
4
5
6
7
8
9
10
struct cmpByStringLength 
{
bool operator()(const std::string& a, const std::string& b) const
{
return a.length() < b.length();
}
};

// ...
std::map<std::string, std::string, cmpByStringLength> myMap;

使用时,正常插入没问题,查找时遇到invalid comparator问题。
原因是comparator不符合规定。

comparator需要时strict weak ordering,需要注意的是,comparator(x,x)必须返回false

参考:
[1].https://stackoverflow.com/questions/9648100/using-own-comparator-operator-for-map-giving-error-in-case-if-key-not-found
[2].https://stackoverflow.com/questions/32263560/errorinvalid-comparator-when-sorting-using-custom-comparison-function

坚持原创技术分享,您的支持将鼓励我继续创作!