首页 > 解决方案 > 为什么我不能在 multimaps c++ 中使用 erase() 向迭代器添加文字值?

问题描述

 std::multimap<std::string, std::string> authors;
 authors.insert ({{"Steven,King", "Cujo"}, {"Jesse,James", "The Highlight"}});
 auto it = authors.begin();
 auto retVal2 = authors.erase(it+1);
 for (auto &i : authors){
     std::cout << i.first << " " << i.second << std::endl;
 }

是否不允许向迭代器添加值以移动到多图中的所需位置?在向量中可以做到这一点。请澄清这是否有任何问题?谢谢你。

标签: c++searchiteratormapserase

解决方案


std::multimap::iterator是一个双向迭代器。双向迭代器没有,operator+因为它一次只能前进一个,从而operator+产生非常慢的功能。也许您正在将它与类似std::vectoror的迭代器进行比较std::array。但是,这些是operator+可以在恒定时间内工作的随机访问迭代器。

由于您只需要添加itby 1,因此您可以轻松替换it+1std::next(it). 如果你想制作一个新的迭代器n元素之后it你也可以这样做std::next(it, n)。像std::next,也有std::prev倒退的。如果你想修改it自己,你可以使用operator++/ operator--(它的行为就像你期望的那样)或使用std::advance(it, n)n向前或向后移动元素(没有std::advancelike的相反std::recede,让你的迭代器返回n应该是一个负数)。


推荐阅读