https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68409
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Adrian Wielgosik from comment #2) > Your operator< doesn't seem to satisfy strict weak ordering. Once I rewrote > it to a basic but safer version: > > bool operator< (const chave& lhs, const chave& rhs) { > if(lhs.numeros_ord != rhs.numeros_ord) > return lhs.numeros_ord < rhs.numeros_ord; > return lhs.estrelas_ord < rhs.estrelas_ord; > } This is a correct implementation. Since C++11 is being used it can also be done like this: bool operator< (const chave& lhs, const chave& rhs) { return std::tie(lhs.numeros_ord, lhs.esterlas_ord) < std::tie(rhs.numeros_ord, rhs.esterlas_ord); }