In my code I have those lines:
if(mymap.count(plan) == 0) {
    std::vector<XYZ> v;
    v.reserve(10);
    mymap.emplace(plan, v);
    std::cout << "Plan " << plan.normal << " @ " << plan.O << " added";
}
//I inserted this code for debugging
std::map<Plan, std::vector<XYZ>>::const_iterator it = mymap.find(plan);
if(it == this->intersections.end())
    std::cout << "not found";
How is it possible that I can read in the console plan added and just after not found ?
My map is declared as such:
std::map<Plan, std::vector<XYZ>, PlanComp> mymap;
At some point I thougt it comes from the comparator, but it respects irreflexivity, antisymmetry, transitivity, transitivity of equivalence (which is enough according to this blog) :
struct PlanComp {
  bool operator()(const Plan& l, const Plan& n) const {
    return (l.O.x != n.O.x) || (l.O.y != n.O.y) || (l.O.z != n.O.z)
            || (l.normal.x != n.normal.x) || (l.normal.y != n.normal.y) || (l.normal.z != n.normal.z);
  }
};
struct XYZ {
    double x;
    double y;
    double z;
};
struct Plan {
    XYZ O;
    XYZ plan;
};
 
    