2015-05-22 2 views
2

Я начал использовать ptree и json parser из boost, чтобы сохранить некоторую быструю информацию. Проблема в том, что мне нужно сохранить только URI, поэтому мне не нужен ключ. Теперь я хочу найти определенное значение и удалить его. Как я могу это сделатьboost ptree изменить массив значений на лету

{ 
    "MyArray": 
    [ 
       "value1", 
       "value2" 
    ] 
} 

Я не могу использовать find() и итераторы не похоже на работу.

for (it ; it != myptree.end(); ++it) 
    if ((*it).second.data.compare(strValueImSearching) != 0) 
    // the previous line is not valid from .data 
     myptree.erase(it); 
+0

Я нашел работу вокруг, но не уверен, что это лучший способ. http://pastebin.com/s2HH2UgS – user3842408

+0

Это на самом деле прояснилось. Я редактировал запутанный заголовок. У вас нет проблемы с запросом массива значений. Кроме того, итераторы работают. Но ни разу не было признано недействительным. См. Мой новый ответ. – sehe

ответ

0

Ах. Лампочка момент.

Вы не можете перебирать коллекцию, которая так меняется, потому что erase вызывает аннулирование текущего итератора.

Смотрите здесь для правил недостоверности итераторов: Iterator invalidation rules

Вместо действительно использовать стабильные итераторы:

while (it != myptree.end()) { 
    if ((*it).second.data.compare(strValueImSearching) != 0) 
     it = myptree.erase(it); 
    else 
     ++it; 
} 
Смежные вопросы