3个回答
展开全部
#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");
}
#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
展开全部
#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;
}
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 可以更改为任意的系统类型、自定义结构体、类、
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
平衡二叉检索树使用中序遍历算法,检索效率高于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 排序"
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |