Yes you could very well have a problem with strict-weak ordering. Odds are its not working like you'd expect. Consider:
bool operator<( const Coord& other ) const
{
return row < other.row && col < other.col ;
}
obj1 (this)
row: 2
col: 3
obj2
row: 3
col: 2
obj1 < obj2? => false
ok well then:
obj2 < obj1? => false
The only conclusion is that they must be equal (based on your < operator). Since this is a map, and keys are unique, both keys reselve to the same spot. This behavior may-or-may not be what you expect, but it sounds like it probably isn't.
What you need is to make a precedence between row/col so that < really works like you'd expect:
bool operator<( const Coord& other ) const
{
// look at row first, if row is equal, check column.
if (row < other.row)
{
return true;
}
else if (row == other.row)
{
return col < other.col ;
}
return false;
}