First of all, operators like comparison operators should usually be implemented as friend functions, not as member functions. In this case, that is not the problem.
The problem is that your member functions for operators < and == both take a const reference (which is correct), but the member functions are not marked as const themselves. Because member functions are called on an object of the class. If that object happens to be marked as 'const', then it should not be modified, which means that only member functions which don't modify the object can be called, and so, you need to mark those member functions which don't modify the object with the keyword 'const' at the end of the function prototype. As so:
bool operator< (const StrategyKey& stratKey) const //notice 'const' here.
{
//..
}
bool operator== (const StrategyKey& StratKey) const //notice 'const' here.
{
//..
}
The error you are getting is simply because the function find() in map is marked as const, and thus, the constness propagates to all its elements, which means only const member functions can be called on them, which excluded your operator overloads (since they were not const).
Usually, the idiomatic way of implementing this is as follows, using friend functions instead:
class StrategyKey
{
public:
//...
friend bool operator< (const StrategyKey& stratKey1, const StrategyKey& stratKey2)
{
//..
}
friend bool operator== (const StrategyKey& StratKey1, const StrategyKey& StratKey2)
{
//..
}
//...
}