You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历打印如下方式创建的二维set的所有元素?

如何打印C++中的二维set(set<set>)元素

嘿,这问题很常见,我来给你两种实用的打印方法,适配不同的C++版本:

方法1:使用传统迭代器(兼容C++98及以上)

你已经定义了外层迭代器it,接下来只需要给每个内层的set<int>也定义一个迭代器,然后嵌套遍历就行。修改你的代码,添加打印部分如下:

#include <iostream>
#include <set>
using namespace std;

int main() {
    int i, j, n;
    set<set<int>> st;
    set<set<int>>::iterator it;
    // 初始化二维set(你的原代码)
    for(i=0;i<5;i++) {
        set<int>row;
        for(j=0;j<5;j++) {
            cin>>n;
            row.insert(n);
        }
        st.insert(row);
    }

    // 打印二维set的核心代码
    cout << "二维set的元素:" << endl;
    for (it = st.begin(); it != st.end(); ++it) {
        // 定义内层set的迭代器
        set<int>::iterator inner_it;
        cout << "{ ";
        for (inner_it = it->begin(); inner_it != it->end(); ++inner_it) {
            cout << *inner_it << " ";
        }
        cout << "}" << endl;
    }

    return 0;
}

方法2:使用范围for循环(C++11及以上更简洁)

如果你的编译器支持C++11或更高版本,用范围for循环会让代码更清爽,不需要手动定义迭代器:

#include <iostream>
#include <set>
using namespace std;

int main() {
    int i, j, n;
    set<set<int>> st;
    // 初始化二维set(你的原代码)
    for(i=0;i<5;i++) {
        set<int>row;
        for(j=0;j<5;j++) {
            cin>>n;
            row.insert(n);
        }
        st.insert(row);
    }

    // 用范围for打印
    cout << "二维set的元素:" << endl;
    for (const auto& inner_set : st) {
        cout << "{ ";
        for (int num : inner_set) {
            cout << num << " ";
        }
        cout << "}" << endl;
    }

    return 0;
}

关键说明

  • 因为set是有序且不重复的容器,所以你插入的元素会自动排序,重复值会被过滤,打印出来的结果是有序的哦。
  • 两种方法的核心都是嵌套遍历:先遍历外层的每个set<int>,再遍历每个内层set里的int元素。
  • 用const auto&可以避免不必要的拷贝,提升效率,尤其是当数据量较大的时候。

内容的提问来源于stack exchange,提问作者Ratnesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:49:29