Нельзя использовать такое сравнение с std::map
.
Одним из требований к элементу шаблона Compare
является транзитивность отношения эквивалентности !comp(a, b) && !comp(b, a)
.Ваше сравнение не выполняется, например, в случае
keycompare comp;
auto equiv = [comp](auto l, auto r) { return !comp(l, r) && !comp(r, l); };
std::string a("111");
std::string b("1-1");
std::string c("101");
std::cout << std::boolalpha << "a == b " << equiv(a, b) << std::endl;
std::cout << std::boolalpha << "b == c " << equiv(b, c) << std::endl;
std::cout << std::boolalpha << "a == c " << equiv(a, c) << std::endl;
В частности, если ваша карта содержит и «111», и «101», что должно быть найдено при поиске «1-1»?