如何在 C++ 中反向迭代地图?
我在 GCC C++ 中的映射上反向迭代时遇到问题。 当我使用反向迭代器时,似乎我无法为其分配任何内容 - 编译器抱怨。 我正在使用前向迭代器使用一些尴尬的代码来解决它,但它不是很优雅。 有什么想法吗?
I'm having trouble iterating in reverse over a map in GCC C++. When I use a reverse iterator, it seems I can't assign anything to it - the compiler complains. I'm working around it with some awkward code using a forward iterator, but it's not very elegant. Any thoughts?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
下面是一个通过
std::map
向后迭代的示例:如果您是 C++11 之前的版本,则只需拼出
auto
,即:请注意,如果您使用 boost,则可以使用基于范围的 for 循环和反向适配器:
Here's an example of iterating backward through a
std::map
:If you are pre-C++11, you'll just need to spell out
auto
, which is:Note that if you're using boost, you can use a range-based for loop with a reverse adapter:
从 C++20 开始,您可以使用范围适配器
std::views::reverse
来自 范围库。 如果您将其添加到 基于范围的 for 循环 并使用 结构化绑定,向后迭代std::map
可能是完成如下:输出:
Wandbox 上的代码
Since C++20 you can make use of the range adaptor
std::views::reverse
from the Ranges library. If you add this to a range-based for loop with structured binding, iterating backwards over anstd::map
could be done as follows:Output:
Code on Wandbox