我正在为我的应用程序构建对象系统。现在我有这样的代码:
std::map<std::string, Object*> mObjects;
这个想法是要以某种顺序更新
Object
类的每个对象(称为update
)。每个对象中都有一个成员
int z_index;
。如何根据该索引对 map 进行排序(顺便说一句,索引可能相同)?我的第一个想法是:将id添加到密钥名称中,例如:
Object *temp = /* ... */
temp->z_index = 5;
temp->name = "test";
mObjects[temp->z_index + temp->name] = temp;
但是有了这段代码,我就失去了按名称访问对象的权限。
最佳答案
似乎是Boost多索引容器的理想选择!
或者,您可以维护两个映射,一个按索引命名,两个映射都持有指向同一对象的指针(应该顺便查看智能指针,例如shared_ptr
!)
或创建一个更复杂的键(即名称和索引为struct
,提供operator<
),可以同时检查名称和索引等。
关于c++ - map 键排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4583411/