我想將一個程序從Java移植到C++,我似乎無法弄清楚如何將LinkedHashMap轉換爲std :: map。我無法更改LinkedHashMap,但我不受限於std :: map。我需要它產生相同的鍵/值對,但是排序/散列/其他任何其他都不重要。將Java LinkedHashMap轉換爲C++ std :: map
Java代碼轉換:
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);
}
}
我嘗試:
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);
}
Java實現創建地圖的尺寸7523和C++一個是7967.有檢查總45234個元素所以它似乎是通過潛在的鍵正確迭代。
我不確定該從哪裏出發。我試過重載操作符,自定義比較器,自定義哈希函數等,我必須錯過一些東西。
歡迎來到Stack Overflow!它看起來像你需要學習使用調試器。請幫助一些[互補調試技術](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。如果您之後仍然遇到問題,請隨時返回一個[最小,完整且可驗證的示例](http://stackoverflow.com/help/mcve),以說明您的問題。 –
請將解決方案作爲答案發布,而不是作爲問題的更新。這是爲了避免混淆。謝謝。 – Bugs