从私人std :: Map中获取价值

Get value from private std::map

本文关键字:获取 Map std      更新时间:2023-10-16

我从C 开始,我正在尝试通过构图扩展STD :: MAP类。我想使用此类CardPackage将ID和指针的私有地图与我的EntityCards一起使用,并实现三种方法AddCardGetCardRemoveCard,它将访问专用MAP m

问题是我无法使用m方法(findend),因为我收到以下错误消息:

expression must have a pointer type

我知道m必须是通过箭头符号(或点)访问的指针,但我不知道要适应代码以尊重我的要求。

标题:

#include <EntityCard.h>
class CardPackage
{
public:
CardPackage();
~CardPackage();
void AddCard(EntityCard* card);
EntityCard* GetCard(int id);
bool RemoveCard(int id);
private:
    map<int, EntityCard*> m;
};

来源:

#include "CardPackage.h"
CardPackage::CardPackage()
{
}

CardPackage::~CardPackage()
{
}
   void CardPackage::AddCard(EntityCard *card)
   {
        m[card->ID] = card;
   }
EntityCard* CardPackage::GetCard(int id)
{
    if (id < 1) { return nullptr; }
    if(m->find(id) == m->end())
    {
        return (m[id]);
    }
    else
    {
        return nullptr;
    }
}
bool CardPackage::RemoveCard(int id)
{
    //TODO
    return false;
}
   if(m->find(id) == m->end())

应该是:

   if(m.find(id) != m.end())

m不是指针,因此您需要.,而不是->。您还以错误的方式进行了测试。

实现稍好的是:

   const auto it = m.find(id);
   if (it != m.end())
       return it->second;
   else
       return nullptr;

区别在于,这仅在地图中进行一次查找,而您的代码则两个。