C里边的STL里边的Set函数

来源:互联网 发布:淘宝外观侵权怎么处罚 编辑:程序博客网 时间:2024/04/29 17:26

set函数的用法:

这是一个集合函数,这个函数可以处理很多的元素,这些元素可以去重,把相同的元素都去掉,剩下不一样的元素,而且还可以自动给这些元素来排序,从小到大的顺序来排序。

这里我们先来举个例子:

比如:

#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int> a;
a.insert(1);
a.insert(9);
a.insert(6);
a.insert(6);
set<int>::iterator i=a.begin();//这里只能使用迭代器,因为对于set集合里边的元素是不能够想访问那个就能访问哪个的,他是像一个栈一样,需要从前往后一一访问,他并不是一个指针就可以跳跃性访问的。这里iterator是一个迭代器,申明方法只能是这样,当让写法是不一样的也行。
while(i!=a.end())
{
cout<<(*i)<<endl;//注意这里需要使用一个*,来代表一个迭代器所指向的那个地址的内容。。。
i++;
}
}

输出就是1 6 9,这里把那个重复出现的6给去掉了。

下边再来想一个问题,能不能我不用去重的集合函数怎么写?当然这里严格意义上说,这个并不是集合,因为这个已经不满足集合的互异性的性质了,但是这里我们为了方便起见,权且叫他集合。。。那么这里就需要把那个set改换成multiset,代码如下:

#include<iostream>
#include<set>
using namespace std;
int main()
{
    multiset<int> a;//改了这里.
    a.insert(1);
    a.insert(9);
    a.insert(6);
    a.insert(6);
    multiset<int>::iterator i=a.begin();//改了这里
    while(i!=a.end())
    {
        cout<<(*i)<<endl;
        i++;
    }

输出结果:

1 6 6 9
下边可能有同学会问,这里能不能将这些元素从大到小来排序?

当然可以,STL是一个没有你想得到写不到的函数的集合,它里边所有的集合,只有你想不到,没有他做不到的。。。这里就是这样改,把set<int>a,改成set<int,compare>a;下边来看一下这个:
#include<iostream>
#include<set>
using namespace std;
struct compare//注意这里很多的map,set函数之类的都是使用结构体,而像sort函数之类的是直接使用函数就行了
{
  bool operator()(int a,int b){//注意这里有2个括号,很容易遗忘,其那边一个只是用来重载括号的,后边一个是里边的参数
      return a>b;
  }
};
int main()
{
    set<int,compare>a;//调用的时候是不一样的,需要注意下
    int i=0;
    while(i++<10)
        a.insert(i);
    for(set<int,compare>::iterator j=a.begin();j!=a.end();j++)//还有这里,需要特别注意
        cout<<*(j)<<" ";
    return 0;
}
}

输出10 9 8 7 6 5 4 3 2 1

下边就是直接复制别人的,大家可以去看下:

set的各成员函数列表如下:

c++ stl容器set成员函数:begin()--返回指向第一个元素的迭代器

c++ stl容器set成员函数:clear()--清除所有元素

c++ stl容器set成员函数:count()--返回某个值元素的个数

c++ stl容器set成员函数:empty()--如果集合为空,返回true

c++ stl容器set成员函数:end()--返回指向最后一个元素的迭代器

c++ stl容器set成员函数:equal_range()--返回集合中与给定值相等的上下限的两个迭代器

c++ stl容器set成员函数:erase()--删除集合中的元素

c++ stl容器set成员函数:find()--返回一个指向被查找到元素的迭代器

c++ stl容器set成员函数:get_allocator()--返回集合的分配器

c++ stl容器set成员函数:insert()--在集合中插入元素

c++ stl容器set成员函数:lower_bound()--返回指向大于(或等于)某值的第一个元素的迭代器

c++ stl容器set成员函数:key_comp()--返回一个用于元素间值比较的函数

c++ stl容器set成员函数:max_size()--返回集合能容纳的元素的最大限值

c++ stl容器set成员函数:rbegin()--返回指向集合中最后一个元素的反向迭代器

c++ stl容器set成员函数:rend()--返回指向集合中第一个元素的反向迭代器

c++ stl容器set成员函数:size()--集合中元素的数目

c++ stl容器set成员函数:swap()--交换两个集合变量

c++ stl容器set成员函数:upper_bound()--返回大于某个值元素的迭代器

c++ stl容器set成员函数:value_comp()--返回一个用于比较元素间的值的函数


c++ stl集合set插入,遍历用法举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream> 
#include<set> 
using namespace std; 
//set插入元素操作  
int main() 
    //定义一个int型集合对象s,当前没有任何元素.由www.169it.com搜集整理
    set<int> s; 
    s.insert(8);  //第一次插入8,可以插入  
    s.insert(1); 
    s.insert(12); 
    s.insert(6); 
    s.insert(8);   //第二次插入8,重复元素,不会插入  
    set<int>::iterator it; //定义前向迭代器 
    //中序遍历集合中的所有元素  
    for(it=s.begin();it!=s.end();it++) 
    cout<<*it<<endl;    
    system("pause"); 
    return 0; 
}

0 0
原创粉丝点击