如何遍历打印如下方式创建的二维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
相关产品推荐
相关产品推荐

