C++ std::map shared_pointer<std::string> 作为键和 std::map 查找函数与尊重



您好,我在为我的游戏项目设计容器时遇到了麻烦。

情况是这样的:

我有一个对象类,其中包含一个ID作为数据成员,这是对象的文件名并使用std::string。我的对象数据信息正在从JSON文件加载,我使用文件名作为 ID.2 原因是唯一的,稍后我需要在我自己的编辑器中显示对象名称。

但是,在编辑器中,我需要对象的一些附加信息,例如bool变量来确定正在选择哪个对象。 在此处输入图像描述

为此,我想在编辑器中使用nameID键的字符串进行std::map,并且该字符串将被shared_pointer,因为如果编辑 ID 名称,值将更改

std::map<shared_ptr<std::string (ID)>, ObjectEditorInfo>

这是我希望能够做的,map_container.find_with_deference("i want to find you");

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

有什么建议可以解决这个问题吗?

如果您希望映射中具有可修改的键,从而定义键标识定义节点而不是键内容,则按内容搜索是无能为力的,而是线性的:

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