auto cmp = [](pair<int, int> & left, pair<int, int> & right){if(left > right) return true; else return false;}; multiset<pair<int, int>, decltype(cmp)> mt(cmp); // if compile 2 lines above, work. // if try insert elements below, i'll errors. //mt.insert({0, 3}); //mt.insert({1, 1}); however, if add const or remove & 2 parameters of cmp, work.
why can't use non-const reference cmp when try insert elements mt?
according cppreference, cmp must meet requirements of compare.
compare's reference says:
as binarypredicate, evaluation of expression not allowed call non-const member functions of dereferenced iterators.
in order prevent comparers unexpectedly change stored elements' state, need either use const reference or take values copy.
Comments
Post a Comment