我已将图表中的边缘定义为一对城市,例如:
make_pair(city1, city2)
我已将这些对存储在set<pair<string,string>>
我现在想要将cityA
的所有实例更改为cityB
。 cityA
可能位于pair.first
或pair.second
位置。
我尝试使用以下循环进行搜索,但是在=符号,即赋值运算符上出现错误。
此代码显示两种方式。
我做错了什么?
for (edgeSetIter = edgeSet.begin(); edgeSetIter != edgeSet.end(); edgeSetIter++)
{
if ((*edgeSetIter).first == cityA) { edgeSetIter->first = cityB; }
else if ((*edgeSetIter).second == cityA) { (*edgeSetIter).second = cityB; }
}
答案 0 :(得分:1)
您无法修改集合的元素,因为它们是关联容器的键。确切quote from cplusplus.com:
在一个集合中,元素的值也标识它(值本身就是T类型的键),并且每个值必须是唯一的。集合中元素的值不能在容器中修改一次(元素总是const),但可以在容器中插入或删除它们。
set
的替代方法可能是使用非关联容器,并且:unique
。