C++ 在一个字符串中定位多个类指针

C++ 在一个字符串中定位多个类指针,c++,C++,好吧,这很难解释。我试图在这里写一个100行的解释,在我看到我失败后,我试图创建一个图像来更好地解释它,但也失败了 这似乎是不可能的,因为它的复杂性非常高。在最原始的情况下,我需要为字符串的每个部分分配Id。目前,我可以为字符串示例分配Id: He: hey She: Hi He: What's up She: Not much, you? He: I'm fine, i'm selling a <Scale Armor> wanna buy it? She: Next time m

好吧,这很难解释。我试图在这里写一个100行的解释,在我看到我失败后,我试图创建一个图像来更好地解释它,但也失败了

这似乎是不可能的,因为它的复杂性非常高。在最原始的情况下,我需要为字符串的每个部分分配Id。目前,我可以为字符串示例分配Id:

He: hey
She: Hi
He: What's up
She: Not much, you?
He: I'm fine, i'm selling a <Scale Armor> wanna buy it?
She: Next time maybe.
如您所见,我可以通过行Id定位
CItemElem
指针,但现在的问题是我需要在字符串中定位多个项目,因为一个句子中最多可以输入3个项目:

He: Hey guys i'm selling <Scale Boots> <Wooden Sword> <Water Helmet> cool items!
他:嘿,伙计们,我在卖很酷的东西!
目前,我一次只能在一个聊天句子中返回一个项目,因为我可以通过行Id找到该项目。过去几个小时我一直在为自己的大脑干杯,请告诉我如何能够在同一个句子Id中返回多个项目


非常感谢

如注释所示,使用
CItemElem*
的向量作为映射中的值,或者编写另一个类来包装它,以提高可读性,同时考虑到未来添加任何其他类型而不是
CItemElem
。此外,如果字符串位置是查找项目所需的键,则可以使用
映射
,而不是
向量
。将跨越项目的每个字符串位置设置为指向该特定项目的指针,以便在鼠标位于该字符串位置时可以轻松检索该字符串

class CLineElem
{

public:
void AddItemElem( CItemElem* pElem_i, int nStrPos_i );
CItemElem* GetItemElemAt( int nStrPos_i );
void RemoveAllItemElems();

private:
    map<unsigned int, CItemElem*> m_Elems;
};
class CLineElem
{
公众:
无效附加元素(城市元素*pElem_i,int-nStrPos_i);
CItemElem*GetItemElemAt(int NSTRPS_i);
void RemoveAllItemElems();
私人:
地图元素;
};

然后在map
m_mItemChat
中使用
CLineElem*
,而不是像注释所建议的那样使用
CItemElem*

,使用
CItemElem*
的向量作为map中的值,或者编写另一个类来包装它,以提高可读性,同时考虑到将来需要添加除
CItemElem
之外的任何其他类型。此外,如果字符串位置是查找项目所需的键,则可以使用
映射
,而不是
向量
。将跨越项目的每个字符串位置设置为指向该特定项目的指针,以便在鼠标位于该字符串位置时可以轻松检索该字符串

class CLineElem
{

public:
void AddItemElem( CItemElem* pElem_i, int nStrPos_i );
CItemElem* GetItemElemAt( int nStrPos_i );
void RemoveAllItemElems();

private:
    map<unsigned int, CItemElem*> m_Elems;
};
class CLineElem
{
公众:
无效附加元素(城市元素*pElem_i,int-nStrPos_i);
CItemElem*GetItemElemAt(int NSTRPS_i);
void RemoveAllItemElems();
私人:
地图元素;
};

然后在地图
m_mItemChat
中使用
CLineElem*
,而不是
CItemElem*

,这是可能的。我不完全确定,但是
map
可能是您需要的。它必须更具体,因为当用户将鼠标移到字符串的某个部分时,它必须显示项目信息(在CItemElem*处按住)。以这种方式在一行中存储多个项目是可以的,问题是找到鼠标上的项目是什么验证我不确定您是如何创建UI的,但您必须为特殊文本创建单独的“区域”/“子视图”,然后分配正确的项目信息。我考虑使用
vector
的想法,不仅为地图分配行id,还分配字符串位置。类似于
struct strPos{unsigned int-uLineId,unsigned int-stringPosStart;}map
但后来我意识到你的想法很好。我现在要做的就是检查鼠标在绳子的哪一部分!(目前我只能通过返回行id来检查项目)这是可能的。我不完全确定,但是
map
可能是您需要的。它必须更具体,因为当用户将鼠标移到字符串的某个部分时,它必须显示项目信息(在CItemElem*处按住)。以这种方式在一行中存储多个项目是可以的,问题是找到鼠标上的项目是什么验证我不确定您是如何创建UI的,但您必须为特殊文本创建单独的“区域”/“子视图”,然后分配正确的项目信息。我考虑使用
vector
的想法,不仅为地图分配行id,还分配字符串位置。类似于
struct strPos{unsigned int-uLineId,unsigned int-stringPosStart;}map
但后来我意识到你的想法很好。我现在要做的就是检查鼠标在绳子的哪一部分!(目前我只能通过返回行id来检查项目)谢谢你们的想法!你让我明白了如何在字符串上存储多个项目,并帮助我发现现在我只需要计算鼠标在字符串的哪一部分。鼠标上方由渲染函数检测,我将计算x和y鼠标位置以及
位置和线Id,然后检索向量中表示的
城市元素*
之一。从现在起,它就在我身边,我只需要放松一下!谢谢谢谢你们的想法!你让我明白了如何在字符串上存储多个项目,并帮助我发现现在我只需要计算鼠标在字符串的哪一部分。鼠标上方由渲染函数检测,我将计算x和y鼠标位置以及
位置和线Id,然后检索向量中表示的
城市元素*
之一。从现在起,它就在我身边,我只需要放松一下!谢谢