std::set使用自定义key时,需要指定comparator,具体做法如下:
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