我要做的是首先将键(因为您只想要返回这些键)提取到矢量中,然后排序如下:
std::vector<baseObject*> out;
std::transform(myMap.begin(), myMap.end(), std::back_inserter(out), [](std::pair<Object*, baseObject*> p) { return p.first; });
std::sort(out.begin(), out.end(), [&myMap](baseObject* lhs, baseObject* rhs) { return myMap[lhs].componentID < myMap[rhs].componentID; });
如果您的汇编器不支持 lambdas, 请将其重写为自由函数或函数对象 。 我只是使用 lambdas 来保持简洁 。
就性能而言,我很可能在最初的矢量中 reservation
有足够的空间,而不是让它逐渐扩大。
(也注意到我测试过代码 所以它可能需要一点小小小小小小小小小小)
此外,我不知道这张地图应该代表什么,但持有一张地图,其中关键类型和价值类型都是指针<它们真的它们> 设置了我的“坏C+++ ” 感触。 它有人工记忆管理以及混乱(或根本不存在)所有权语义的味道。
您提到在 < code> list code > 中获取输出, 但 < code> victor code > 几乎肯定是一个更好的操作选项, 所以我使用这个选项。 只有这样, < code> list code > 才会更可取。 只有当您无意在列表上反复转动时, 并且如果您需要保证在修改列表后指示器和传译器保持有效时, 才会使用此选项 。