J'essaie de porter un programme de Java vers C++ et je n'arrive pas à comprendre comment convertir un LinkedHashMap en un std :: map. Je ne peux pas changer le LinkedHashMap mais je ne suis pas limité à std :: map. J'en ai besoin pour produire la même paire clé/valeur mais commander/hacher/quoi que ce soit d'autre n'a pas vraiment d'importance.Conversion de Java LinkedHashMap en C++ std :: map
code Java à convertir:
List<Face> faces = new ArrayList<Face>(modelFull.faces.length);
Map<Point3D, Integer> map = new LinkedHashMap<Point3D, Integer>();
for (int i = 0; i < modelFull.faces.length; i++) {
Face f = new Face(modelFull.faces[i]);
faces.add(f);
for (int k = 0; k < 3; k++) {
Point3D p = f.pts[k];
Integer v = map.get(p);
if (v == null) {
v = 0;
}
map.put(p, v + 1);
}
}
Ma tentative:
std::map<RVPoint3D, int> pointMap;
auto modelFaces = modelFull.getFaces();
for (const auto &face : modelFaces)
{
Face newFace = Face(face);
for (int k = 0; k < 3; ++k)
{
RVPoint3D pt = newFace.getPts()[k];
++pointMap[pt];
}
faces.push_back(newFace);
}
L'implémentation Java crée une carte de taille 7523 et un C++ est 7967. Il y a 45234 éléments inspectés au total pour à la fois il semble donc itérer correctement à travers les clés potentielles.
Je ne sais pas où aller à partir d'ici. J'ai essayé de surcharger les opérateurs, les comparateurs personnalisés, les fonctions de hachage personnalisées, etc. et il me manque quelque chose.
Bienvenue dans Stack Overflow! Il semble que vous ayez besoin d'apprendre à utiliser un débogueur. S'il vous plaît aidez-vous à quelques [techniques de débogage complémentaires] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Si vous avez encore des problèmes après, s'il vous plaît n'hésitez pas à revenir avec un [Exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) qui démontre votre problème. –
Veuillez publier des solutions en tant que réponses et non en tant que mises à jour de la question.Ceci est pour aider à éviter la confusion. Je vous remercie. – Bugs