C++ stl集合迭代器

C++ stl集合迭代器,c++,stl,iterator,set,C++,Stl,Iterator,Set,我有一个包含Cell类对象的stl集 class Cell { public: //Ctor/Dtor Cell(size_t cellId=0,int x =0,int y = 0,size_t t = 0):m_cellId(cellId),m_x(x),m_y(y),m_t(t),m_color(WHITE),m_pCellId(0),m_regNum(0){} //////////////////// // Mutators // //

我有一个包含Cell类对象的stl集

class Cell
{
public:
    //Ctor/Dtor
    Cell(size_t cellId=0,int x =0,int y = 0,size_t t = 0):m_cellId(cellId),m_x(x),m_y(y),m_t(t),m_color(WHITE),m_pCellId(0),m_regNum(0){}
    ////////////////////
    //    Mutators    //
    ////////////////////
    void schedNode(size_t t,int nodeId){m_sched[t] = nodeId;}
    void setColor(color c){m_color = c;}
    void setParentId(size_t pId){m_pCellId = pId;}
         //.....
}
每个
单元格
都有
mux
muy
(成员)坐标+其他数据成员(
mut、mu color、mu pCellId、mu regNum

comapareCells类仅用于根据单元格的实际m_x和m_y坐标查找单元格:

class comapareCells
{
public:
    bool operator()(const Cell& lCell,const Cell& rCell)
    {
        if(lCell.getX() < rCell.getX())
            return true;
        else if(lCell.getX() == rCell.getX())
            return (lCell.getY() < rCell.getY());
        else
            return false;
    }

};
我得到
itCell->setColor(灰色)的编译错误;itCell->setParentId(cIdFrom)

无法将“this”指针从“const Cell”转换为“Cell&”


如何解决此问题?

通过迭代器更改
集的元素值是不合法的,因为
无法知道您所更改的内容,并且会使其无效。如果您想像这样更改它,您必须将其删除,然后将其与更改一起重新插入

Cell newCell(*itCell);
newCell.setColor(GRAY);
m_cells.erase(itCell);
m_cells.insert(newCell);

通过迭代器更改
集合
元素的值是不合法的,因为
集合
无法知道您更改了什么,并且会使其无效。如果您想像这样更改它,您必须将其删除,然后将其与更改一起重新插入

Cell newCell(*itCell);
newCell.setColor(GRAY);
m_cells.erase(itCell);
m_cells.insert(newCell);

你在哪一行得到错误?还有itCell->setParentId(cIdFrom);(同一错误)可能重复您在哪一行上获得错误?以及itCell->setParentId(cIdFrom);(同样的错误)的可能重复看起来像是stl::set实现设计中的一个bug…例如,我可以通过迭代器stl::vector进行更改。迭代器的作用是获取容器的实际对象。对,但如果更改
向量中某个对象的值则无关紧要。
set
需要准确地知道其中的内容才能正常工作。看起来像是stl::set实现设计中的一个bug…例如,我可以通过迭代器stl::vector进行更改。迭代器的作用是获取容器的实际对象。对,但是如果您更改
vector
中某个内容的值,这并不重要。
集合
需要准确知道其中的内容才能正常工作。