2015-08-06 5 views
2

Я определил края в моем графике в виде пары городов, как: make_pair(city1, city2)C++ ищет одну строку в наборе пар строк

Я хранятся пары в set<pair<string,string>>

Я сейчас хотите изменить все экземпляры cityA на cityB. cityA может находиться в pair.first или pair.second.

Я попытался выполнить поиск со следующими циклами, но я получаю сообщение об ошибке в = sign, операторе присваивания.

Этот код показывает два способа.

Что я делаю неправильно?

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

ответ

1

Вы не можете изменять элементы набора, так как они являются ключом к ассоциативному контейнеру. Точное quote from cplusplus.com:

В наборе, значение элемента также идентифицирует его (значение само по себе является ключом, типа Т), и каждое значение должно быть уникальным. Значение элементов в наборе нельзя изменить один раз в контейнере (элементы всегда const), но они могут быть вставлены или удалены из контейнера.

Альтернатива set может использовать неассоциативный контейнер и: unique.

+0

Да, вы не можете изменить предмет, который выполняется итерацией. Спасибо ! – LindaK

 Смежные вопросы

  • Нет связанных вопросов^_^