C ++ std :: map shared_pointer <std :: string>作为键和std :: map具有引用的查找功能

时间:2018-10-18 18:08:25

标签: stl

你好,我很难确定我的游戏项目的容器设计。

情况是这样的:

我有一个对象类,其中包含一个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");

问题是,如果我的密钥是共享指针,我想将它与指针的值结果而不是地址进行实际比较。

有人建议解决这个问题吗?

1 个答案:

答案 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; });