访问映射中的第二个元素,它是对象指针

时间:2016-12-29 13:21:51

标签: c++ c++11 dictionary iterator stdmap

我正在尝试访问mainRegister地图中的第二个元素:

 class Manager
{
private:
    std::map<boost::uuids::uuid, Rental*> mainRegister;
    std::vector <Rental*> archiveRegister;
    std::vector<Client*> ClientRegister;
    std::vector<Vehicle*> VehicleRegister;

public:
    Manager();
    void createRental();
    void deleteRental(Rental rent);
    std::string showArchive() const;
    std::string showMain() const;
    std::string showVehicles() const;
    std::string showClients() const;
    void sortDate();
    void sortClient();
    bool checkVehicle(std::map <Vehicle*, Rental*> myMap);
    virtual ~Manager();

protected:

};

这是我正在尝试做的事情:

void Manager::deleteRental(Rental* rent)
{
  for (auto it = mainRegister.cbegin(); it != mainRegister.cend()
  {
    if (it.second->getUUID() == rent->getUUID())
    {
      archiveRegister.push_back(it.second);
      mainRegister.erase(it++);
    }
    else
    {
      ++it;
    }
  }
}

我的主要目标是在map中找到元素,第二个元素与传递给方法的对象具有相同的UUID,然后将该对象移动到归档寄存器向量,然后从地图中删除该元素。

我得到的错误是:

-struct std :: _ Rb_tree_const_iterator&gt;'没有名为'second'|

的成员

- 没有匹配函数来调用'std :: vector :: push_back(second_t&gt;)'|

我知道可能我试图访问地图中每对的第二个元素的方式是完全错误的,但我真的不知道如何做到这一点。

1 个答案:

答案 0 :(得分:1)

你的if语句没有正确使用it迭代器,迭代器是指针式的,所以应该是:

if (it->second->getUUID() == rent->getUUID())
      ^^