c++ - STL设置迭代器

标签 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    //
    ////////////////////
    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;}
         //.....
}

每个Cell都有m_xm_y(成员)坐标+其他数据成员(m_t,m_color,m_pCellId,m_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;
    }

};

我运行以下命令以查找“实际单元”:c是仅具有所需单元格坐标的单元格。它用于查找包含在cet中的具有给定坐标的实际单元格,并尝试对实际单元格进行一些操作:
set<Cell,comapareCells>::iterator itCell;
    if((itCell = m_cells.find(c)) == m_cells.end())
        return;
    if(itCell->getColor() != WHITE)
        return;
    itCell->setColor(GRAY);
    itCell->setParentId(cIdFrom);

我收到itCell->setColor(GRAY); itCell->setParentId(cIdFrom);的编译错误:

cannot convert 'this' pointer from 'const Cell' to 'Cell &'



如何解决?

最佳答案

通过迭代器更改set元素的值是不合法的,因为set无法知道您所做的更改并将其无效。如果要像这样进行更改,则必须将其删除并随更改重新插入。

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

关于c++ - STL设置迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9452321/

相关文章:

c++ - 自定义分配器无法重新绑定(bind)到其他类型

c++ - C++ STL 中 max_element 和 minmax_element 的行为差异

C++ 对 const 引用的参数的依赖不变

c++ - 促进树的序列化?

c++ - 细粒度 nanosleep 在 Linux 上的 C++ 程序中效率不高

c++ - 为什么 std::map<int, float> 不能使用运算符 []:错误 C2678?

c++ - C++ std::vector::const_iterator问题

iterator - iter().cloned().filter().map() 的返回类型应该是什么

java - 第一次调用后迭代器的Remove方法不起作用

c++ - 出现编译错误: 0x2 trying to open file <vfdmsg>