Сборка на CentOS 7, g++ 4.8.5-28. Стандарт языка: C++03
Рабочий образец: https://godbolt.org/z/ijSFrK
В методе RemoveMapping вызов mapDb.erase(clientIter);
завершается с ошибкой (см. пример кода в ссылке для фактического кода и ошибки компиляции). Мне интересно, связано ли это с несколькими упорядоченными индексами, которые используют как составные ключи, так и методы извлечения ключей?
Скорее, чем
mapDb.erase(clientIter);
ты должен написать
clientView.erase(clientIter);
Помните, что у каждого индекса (представления) есть свой тип итератора, и вы не можете свободно менять их местами. Для удобства сам контейнер (здесь mapDb
) ведет себя как его первый (#0) индекс, поэтому mapDb.erase
может принимать итератор только для serverView
.
Да, именно эта довольно тонкая деталь ускользнула от меня.
Я могу ошибаться, но stackoverflow.com/questions/11558399/…, кажется, говорит, что стирание является членом индекса, а не контейнером. Это дубликат? На что еще обратить внимание: stackoverflow.com/questions/12579000/…