Multimap/set with predicates of derived types.
It looks as though in the MS VS2010 implementation the stored function
object for the compare on a multimap is a copy of the supplied object,
rather than the object itself. This means that the supplied object to a
constructor taking a compare can???t be of a class derived from the
template, but must be of the same class. Is this correct behaviour? If
so, why?
Andy
#include <set>
#include <algorithm>
#include <iostream>
int main()
{
// compare class derives from less<int>,
// but behaves like greater
class KC: public std::less<int>
{
public:
bool operator()(const int& _Left, const int& _Right) const
{
// inverted from normal
return (_Left > _Right);
}
};
// This class has a compare _type_ of less<int>
// but a specific object similar to greater
auto M = std::set<int>(KC());
M.insert(1);
M.insert(3);
M.insert(2);
// Output shows sort is by less not greater
std::for_each(M.begin(), M.end(), [&](int i){std::cout << i;});
}
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]