C++ 的 set 集合应该怎么用,求简单的初始化,添加值,和遍历!!!

求一个简单的例子,还有要写什么头文件???... 求一个简单的例子,还有要写什么头文件??? 展开
 我来答
HiHotzenplotz
2013-08-29 · TA获得超过439个赞
知道小有建树答主
回答量:345
采纳率:62%
帮助的人:164万
展开全部
#include <iostream>
#include <set>
using namespace std;
void main()
{
set<int> s1; //空set集合
set<int>::iterator it;

int a[]= {1,2,3,4,5};
set<int> s2 (a,a+5); //利用指针对象初始化set集合

s2.insert(0); //插入方法1
s2.insert(s2.begin(),7); //插入方法2
int b[] ={10,11,12,13,14,15};
s2.insert(b,b+3); //插入方法3

cout<<"集合s2中的元素:"<<endl;
for(it=s2.begin();it!=s2.end();it++) //遍历
cout<<" "<<*it<<endl;

system("pause");
}
更多追问追答
追问
set集合应该可以放结构体吗
追答
可以啊,在中写你要的类型(要定义过的)就可以了,如set,set
zouadw
2013-08-29 · TA获得超过102个赞
知道答主
回答量:90
采纳率:100%
帮助的人:95.9万
展开全部
#include <set>
using namespace std;
int main()
{
set<int> iset;
iset.clear();
iset.insert(1);
iset.insert(2);
iset.insert(3);
set<int>::iterator iter=iset.begin();
while(iter!=iset.end())
{
printf("%d\n",*iter);
iter++;
}
getchar ();
return 0;
更多追问追答
追问
set集合应该可以放任何类型的数据吧
追答
set iset;
这里面的 int 可以更改为任意的系统类型、自定义结构体、类、
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cooke1234
推荐于2017-09-29 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3578万
展开全部
set集合容器:实现了红黑树的平衡二叉检索树的数据结构,插入元素时,它会自动调整二叉树的排列,把元素放到适当的位置,以保证每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值;另外,还得保证根节点左子树的高度与右子树高度相等。
平衡二叉检索树使用中序遍历算法,检索效率高于vector、deque和list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。
构造set集合主要目的是为了快速检索,不可直接去修改键值。

头文件:#include <set>
常用操作:
1.元素插入:insert()
2.中序遍历:类似vector遍历(用迭代器)
3.反向遍历:利用反向迭代器reverse_iterator。
例:
set<int> s;
......
set<int>::reverse_iterator rit;
for(rit=s.rbegin();rit!=s.rend();rit++)
4.元素删除:与插入一样,可以高效的删除,并自动调整使红黑树平衡。
set<int> s;
s.erase(2); //删除键值为2的元素
s.clear();
5.元素检索:find(),若找到,返回该键值迭代器的位置,否则,返回最后一个元素后面一个位置。
set<int> s;
set<int>::iterator it;
it=s.find(5); //查找键值为5的元素
if(it!=s.end()) //找到
cout<<*it<<endl;
else //未找到
cout<<"未找到";
6.自定义比较函数
(1)元素不是结构体:
例:
//自定义比较函数myComp,重载“()”操作符
struct myComp
{
bool operator()(const your_type &a,const your_type &b)
[
return a.data-b.data>0;
}
}
set<int,myComp>s;
......
set<int,myComp>::iterator it;
(2)如果元素是结构体,可以直接将比较函数写在结构体内。
例:
struct Info
{
string name;
float score;
//重载“<”操作符,自定义排序规则
bool operator < (const Info &a) const
{
//按score从大到小排列
return a.score<score;
}
}
set<Info> s;
......
set<Info>::iterator it;
追问
在遍历中我要是想调用集合set 的第一个元素 ,应该怎么调用???  set(0)???
追答

set中元素的存放顺序是内部计算出来的,不是你放入元素的顺序,也就是说你放入的第N个元素,并不一定存放在set的第N个位置上。

所以对set按照指定位置进行存取是没有意义的。

不过读取第一个元素,和最后一个元素,可以用begin()和end()读出来。(但是读取出来的数据,不是最先(最后)放入的数据)

int main()
{
        set<int> s;
        s.insert(50);
        s.insert(80);
        s.insert(40);
        s.insert(60);
        if (s.begin()!=s.end()) {
                cout << "first:" << *s.begin() << endl;
                cout << " last:" << *(--s.end()) << endl;
        }
        return 0;
}

------------------------
如果想对元素排序,请用map来做,百度一下"c++ map 排序"
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式