C++中如何遍历存储pair的pair的容器并简洁访问全部元素?
遍历嵌套pair容器的简洁方法
你尝试的[[a, b], [c, d]]结构化绑定写法编译失败的原因是:C++标准目前不支持这种直接双层嵌套的结构化绑定语法——结构化绑定只能针对单个聚合类型(比如pair、tuple)进行解构,无法一次性穿透两层pair直接绑定内部的四个int变量。
下面是满足你“少局部变量、无多余拷贝”要求的最优遍历方案:
std::vector<std::pair<std::pair<int, int>, std::pair<int, int>>> vec = { {{1, 2}, {3, 4}}, {{5, 6}, {7, 8}} }; for (const auto& [outer_first, outer_second] : vec) { const auto& [a, b] = outer_first; const auto& [c, d] = outer_second; // 在此处使用a、b、c、d,所有变量都是原容器元素的常量引用,无任何拷贝操作 }
额外说明
- 全程使用
const auto&绑定,确保完全复用容器内的原始元素,不会创建多余的局部变量拷贝; - 若需要修改容器内的元素,可去掉
const,改用auto&绑定; - 如果你强行追求一行式写法(不推荐,可读性会大幅下降),可以用
std::tie实现,但会产生变量拷贝,不如引用绑定高效:
for (const auto& [p1, p2] : vec) { int a, b, c, d; std::tie(a, b) = p1; std::tie(c, d) = p2; // 使用a、b、c、d }
内容的提问来源于stack exchange,提问作者Mampac
相关产品推荐
相关产品推荐

