你好,我很难确定我的游戏项目的容器设计。
情况是这样的:
我有一个对象类,其中包含一个ID作为数据成员,它是对象的文件名,并使用std::string
。我的对象数据信息正在从JSON
文件中加载,我使用文件名作为ID。 2个原因是唯一的,以后我需要在自己的编辑器中显示对象名称。
但是,在编辑器中,我需要有关该对象的一些附加信息,例如bool
变量以确定要选择哪个对象。
enter image description here
为此,我想到在编辑器中为nameID
使用std::map
键的字符串,并且字符串将为shared_pointer
,因为如果ID名称被编辑,则值将更改
std::map<shared_ptr<std::string (ID)>, ObjectEditorInfo>
这就是我想做的,
map_container.find_with_deference("i want to find you");
问题是,如果我的密钥是共享指针,我想将它与指针的值结果而不是地址进行实际比较。
有人建议解决这个问题吗?
答案 0 :(得分:0)
如果您想在地图中使用可修改的键,从而键标识定义一个节点而不是键内容,那么按内容搜索是无济于事的,而是线性的:
auto element = std::find_if(map.begin(), map.end(), [&key](auto const &node){ return *node.first == key; });
当然,字符串可以是非唯一的。您将需要当前的迭代器来搜索下一个条目:
auto next_element = std::find_if(element, map.end(), [&key](auto const &node){ return *node.first == key; });