stl集合迭代器
stl set iterator
我有一个带有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_x
和m_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;
}
};
我运行以下操作以查找"实际单元格":CCD_ 5是仅具有所需的单元坐标的单元。它用于查找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);
:的编译错误
无法将"this"指针从"const Cell"转换为"Cell&"
如何解决?
通过迭代器更改set
元素的值是不合法的,因为set
无法知道您更改了什么,并且会使其无效。如果您想这样更改它,则必须将其删除并随更改一起重新插入。
Cell newCell(*itCell);
newCell.setColor(GRAY);
m_cells.erase(itCell);
m_cells.insert(newCell);
相关文章:
- 集合上的输出迭代器:assign和increment迭代器
- C++集合的嵌套迭代器
- 基于函数而不是集合的二分搜索或迭代器?
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 通过C 中的迭代器中的集合中的集合
- Qt:为模板(映射、列表、集合等)构建一个可变迭代器
- C 迭代器到集合的最后一个元素
- 为什么迭代器不返回集合的开头
- 是同一集合上的两个不同的迭代器
- 在C 中初始化集合迭代器
- 迭代器是否以相同的顺序迭代 boost::unordered_set 或 boost::unordered_map 只要集合不变?
- 集合迭代器处的多个标记
- 表达式:映射/集合迭代器不可递增
- 映射/集合迭代器不兼容-检查对象是否在映射中
- 映射/集合迭代器不兼容-检查映射中是否存在键
- 具有集合<string>和迭代器的函数
- 如何在 Map 中存储集合容器的迭代器列表
- 集合数据结构中的 end() 迭代器应该返回什么
- C++集合中的迭代器
- 充当过滤器的范围——不同的迭代器集合