您好,我在为我的游戏项目设计容器时遇到了麻烦。
情况是这样的:
我有一个对象类,其中包含一个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; });