c++ - 为什么我不能在 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;
}
是否不允许向迭代器添加值以移动到多图中的所需位置?在向量中可以做到这一点。请澄清这是否有任何问题?谢谢你。
解决方案
std::multimap::iterator
是一个双向迭代器。双向迭代器没有,operator+
因为它一次只能前进一个,从而operator+
产生非常慢的功能。也许您正在将它与类似std::vector
or的迭代器进行比较std::array
。但是,这些是operator+
可以在恒定时间内工作的随机访问迭代器。
由于您只需要添加it
by 1
,因此您可以轻松替换it+1
为std::next(it)
. 如果你想制作一个新的迭代器n
元素之后it
你也可以这样做std::next(it, n)
。像std::next
,也有std::prev
倒退的。如果你想修改it
自己,你可以使用operator++
/ operator--
(它的行为就像你期望的那样)或使用std::advance(it, n)
来n
向前或向后移动元素(没有std::advance
like的相反std::recede
,让你的迭代器返回n
应该是一个负数)。
推荐阅读
- unity3d - (Unity)如何将数据(Vector3 和 Color32)烘焙到渲染纹理上?
- sql - 将行插入具有日期条件的表中
- javascript - 样式加载器未在我的中加载 css
- ssl - 使用 webhooks 的 vernemq 身份验证
- excel - 重复内容控制项的索引
- c# - 如何在 C# 中创建小于 384 位的 RSA 密钥
- django - 在 django 中批量更新时出现死锁
- batch-file - 使用 xcopy 备份完整文件夹,即使只有一个文件是新的
- ionic-framework - 在 ios 设备上运行应用程序后代码更改未反映
- c++ - 中断函数调用与普通函数