C ++在一组字符串对

时间:2015-08-06 23:42:35

标签: c++ set std-pair

我已将图表中的边缘定义为一对城市,例如: make_pair(city1, city2)

我已将这些对存储在set<pair<string,string>>

我现在想要将cityA的所有实例更改为cityBcityA可能位于pair.firstpair.second位置。

我尝试使用以下循环进行搜索,但是在=符号,即赋值运算符上出现错误。

此代码显示两种方式。

我做错了什么?

for (edgeSetIter = edgeSet.begin(); edgeSetIter != edgeSet.end(); edgeSetIter++)            
    {
    if ((*edgeSetIter).first == cityA) { edgeSetIter->first = cityB; }
    else if ((*edgeSetIter).second == cityA) { (*edgeSetIter).second = cityB; }
    }                                                                                   

1 个答案:

答案 0 :(得分:1)

您无法修改集合的元素,因为它们是关联容器的键。确切quote from cplusplus.com

  

在一个集合中,元素的值也标识它(值本身就是T类型的键),并且每个值必须是唯一的。集合中元素的值不能在容器中修改一次(元素总是const),但可以在容器中插入或删除它们。

set的替代方法可能是使用非关联容器,并且:unique