c++ - 在基于范围的 for 循环中使用结构化绑定声明
问题描述
我正在尝试将两个std::map
容器(例如std::map<int, int> foo, bar
)组合成第三个容器(std::map
例如std::map<int, int> foobar
)。
我知道我可以使用迭代器来实现这一点,如下所示:
std::map<int, int>::iterator itr1 = foo.begin();
std::map<int, int>::iterator itr2 = bar.begin();
for (; itr1 != foo.end() && itr2 != bar.end(); ++itr1, ++itr2)
{
foobar[itr1->first] += itr1->second;
foobar[itr2->first] += itr2->second;
}
但是我如何使用基于范围的 for 循环(也许,结合结构化绑定声明)来实现相同的效果?
或者有没有更好的方法来组合这两个关联容器?
编辑:这个问题的预期答案应该采用两个容器(std::map
此处)并将它们组合成一个联合/联合映射,其中键来自各自的关联容器和添加的重复键的值。
示例:
如果给定std::map
容器foo
并且bar
是:
std::map<int, int> foo = {{1, 10}, {2, 20}, {3, 30}};
std::map<int, int> bar = {{3, 50}, {4, 60}};
那么 `foobar' 应该是:
std::map<int, int> foobar = {{1, 10}, {2, 20}, {3, 80}, {4, 60}};
这一切都在一个基于 Range 的 for 循环中完成。
解决方案
有没有更好的方法来组合这两个关联容器?
最简单的方法可能是分别迭代它们:
for(auto[k, v] : foo) foobar[k] += v;
for(auto[k, v] : bar) foobar[k] += v;
如果你想丢弃任何已经存在的数据foobar
:
foobar = foo;
for(auto[k, v] : bar) foobar[k] += v;
推荐阅读
- python - Coding theory - Algorithm
- c - Why is there a number 22 in GCC's implementation of a VLA (variable-length array)?
- sql - How do I do a look up from a user table where the user can be in two columns of the record?
- react-native - Janus / React Native:远程视频是空白的
- python - 如何在 python 中将点云(.ply)写入图像(.jpg)?
- reactjs - 如何使用 React context-API 在任何组件之间传递数据,而 Provider 不位于层次结构之上
- nginx - Nginx Proxy Pass 不通过端口
- swift - 编辑文本文件并将其添加到项目的问题
- html - 离开悬停后反转 CSS 动画不起作用
- mips - 我怎样才能得到 b[2] 和 a[b[2]] * 2 到 MIPS