У меня есть std::map
и std::unordered_set
с одним и тем же ключом.
Я хочу удалить все ключи из набора, которых нет на карте.
Моя идеядолжен был сделать что-то вроде следующего:
#include <map>
#include <unordered_set>
int main()
{
std::map<uint64_t, std::string> myMap = {
{1, "foo"},
{2, "bar"},
{3, "morefoo"},
{4, "morebar"}
};
std::unordered_set<uint64_t> mySet = { 1, 2, 3, 4, 123 };
for (const auto key : mySet)
{
const auto mapIterator = myMap.find(key);
if (myMap.end() == mapIterator)
mySet.erase(key);
}
return 0;
}
и затем вызывать его при обратном вызове таймера каждые несколько секунд, однако приведенный выше фрагмент кода выдает утверждение при попытке удалить ключ 123
из mySet
, заявив:
Итератор списка не может быть увеличен.
Дело в том, что даже если это не исключение, я чувствую, что эта идея далека от элегантной / оптимальной.Мне интересно, есть ли лучший способ решить эту проблему?
Спасибо.