STL

1.  set: 顾名思义,就是数学上的集合——每个元素最多只出现一次,并且set中的元素已经从小到大排好序。使用时需要加头文件set。和vector的区别是set可以去重。

成员函数有:

s.begin();返回set容器的第一个元素的地址

s.end();返回set容器的最后一个元素地址

s.clear();删除set容器中的所有的元素

s.empty();判断set容器是否为空

s.max_size();返回set容器可能包含的元素最大个数

s.size();返回当前set容器中的元素个数

s.erase(it);删除迭代器指针it处元素

s.insert(a);插入某个元素 

用set实现集合并交差

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
int main()
{
	set<int>x;
	set<int>y;
	set<int>z;
	x.insert(1);
	x.insert(2);
	x.insert(3);
	y.insert(2);
	y.insert(3);
	y.insert(5);
	set<int>::iterator it;
    cout<<"x的集合为:";
	for(it=x.begin();it!=x.end();it++)
		cout<<*it<<" ";
	cout<<endl;
    cout<<"y的集合为:";
	for(it=y.begin();it!=y.end();it++)
		cout<<*it<<" ";
	cout<<endl;
	set_union(x.begin(),x.end(),y.begin(),y.end(),inserter(z,z.begin()));
	cout<<"并集:";
	for(it=z.begin();it!=z.end();it++)
		cout<<*it<<" ";
	cout<<endl;
	z.clear();
	set_intersection(x.begin(),x.end(),y.begin(),y.end(),inserter(z,z.begin()));
    cout<<"交集:";
	for(it=z.begin();it!=z.end();it++)
		cout<<*it<<" ";
	cout<<endl;
	z.clear();
    set_difference(x.begin(),x.end(),y.begin(),y.end(),inserter(z,z.begin()));
    cout<<"差集:";
	for(it=z.begin();it!=z.end();it++)
		cout<<*it<<" ";
	cout<<endl;
	return 0;
}

还有两个功能类似的函数:count()和find()

1.count() :用来查找set中某个元素出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。

2.find(): 用来查找set中某个元素出现的位置。如果找到,就返回这个元素的迭代器,如果这个元素不存在,则返回 s.end() 。 (最后一个元素的下一个位置,s为set的变量名)

set的遍历

需要用到迭代器,具体的方法见下面的代码:

#include<iostream>

#include<set>

usingnamespacestd;

int main()

{

    set<int>s;                //创建一个int类型的set

 

    s.insert(10);                //插入数据

    s.insert(30);

    s.insert(20);

    s.insert(40);               

 

    //遍历数据,用迭代器遍历数据

    for (set<int>::iteratorit = s.begin(); it != s.end(); ++it)   

    {

        cout <<*it << endl;

    }

    //这里用到了set中的元素已经从小到大排好序的性质

 

    return0;

}

最后,不得不提的就是结构体类型(struct )的set ,使用时必须要重载 ‘<’ 运算符

#include<iostream>

#include<set>

#include<string>

usingnamespacestd;

struct Info

{

    string name;

    double score;

    booloperator < (const Info&a) const// 重载“<”操作符,自定义排序规则

    {

        //score由大到小排序。如果要由小到大排序,使用“>”即可。

        return a.score< score;

    }

};

int main()

{

    set<Info> s;

    Info info;

 

    //插入三个元素

    info.name = "Jack";

    info.score = 80;

    s.insert(info);

    info.name = "Tom";

    info.score = 99;

    s.insert(info);

    info.name = "Steaven";

    info.score = 60;

    s.insert(info);

 

    set<Info>::iterator it;

    for(it = s.begin(); it != s.end(); it++)

        cout <<(*it).name << " : " << (*it).score << endl;

    return0;

}

而 map:映射,关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力。

具体用法可参考下面这篇博客

map详解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值