我必须在mytextmap
中找到与keymap
最接近的值,对于所有keymap
的元素,并在名为{{{{{}}的新map <char, char>
中将其附加到彼此1}}(key
的键是key
的键,值是keymap
的键。
这是我的尝试:
mytextmap
find_value - 返回(map.begin(),map.end())中元素的itterator值(如我的代码中的j)。
某处有错误。崩溃错误:“表达式映射/设置迭代器不能解除引用。” 问题不在擦除(已修复)。在线上它开始了。在工作之前蜇,字符串之后 - 否。
答案 0 :(得分:1)
行后
keymap.erase(i);
迭代器i
无效。
尝试:
for (auto i = keymap.begin(); i != keymap.end(); )
{
int j = ((i->second) / sumkey)*sum;
auto tmp = find_value(mytextmap.begin(), mytextmap.end(), j);
while (tmp->second != j)
{
j--;
tmp = find_value(mytextmap.begin(), mytextmap.end(), j);
}
key[(*tmp).second] = i->second;
auto next = i;
std::advance(next, 1);
keymap.erase(i);
i = next;
mytextmap.erase(tmp);
}
如果您使用的是C ++ 11编译器,则可以使用:
for (auto i = keymap.begin(); i != keymap.end(); )
{
int j = ((i->second) / sumkey)*sum;
auto tmp = find_value(mytextmap.begin(), mytextmap.end(), j);
while (tmp->second != j)
{
j--;
tmp = find_value(mytextmap.begin(), mytextmap.end(), j);
}
key[(*tmp).second] = i->second;
i = keymap.erase(i);
mytextmap.erase(tmp);
}
更新,以回应OP的评论
我认为问题在于:
while (tmp->second != j)
{
j--;
tmp = find_value(mytextmap.begin(), mytextmap.end(), j);
}
key[(*tmp).second] = i->second;
tmp == mytextmap.end()
时会发生什么?
我不明白你想要在这些方面完成什么。我建议您添加一些检查,以确保在tmp
时无法访问tmp == mytextmap.end()
。