stl库之set、multiset

set和multiset是stl中重要的关联容器,他们的特点有:

1、其的元素不能被修改,只能删除后再添加。

2、集合中的元素按一定的顺序排列,并被作为集合中的实例。

3、要一个键/值对(pair)来存储数据,map(也是一个关联容器)是一个更好的选择。

4、一个集合通过一个链表来组织,在插入操作和删除操作上比向量(vector)快,但查找或添加末尾的元素时会有些慢。

5、集和多集的区别是:set支持唯一键值,set中的值都是特定的,而且只出现一次;而multiset中可以出现副本键,同一值可以出现多次。

下面是具体实例:

#include "stdafx.h"
#include <set>
#include <string>
#include <iostream>
using namespace std;

int ar[20] = {  
	12, 45, 100, 23, 33,
	33, 63, 11,  2,  33,
	3,  12, 33, 88,  70, 
	33, 33, 24, 75,  16 };
char* str = "Hello World";

void showSet(string infos,set <int> set1);
void showSet(string infos,set <int> set1){
	infos=infos+"setItems:";
	cout<<endl<<infos<<endl;  
    for(set<int>::const_iterator p=set1.begin();p!=set1.end(); ++p)  
        cout<<*p<<" "; 
}

void showMultiset(string infos,multiset <int> set1);
void showMultiset(string infos,multiset <int> set1){
	infos=infos+"setItems:";
	cout<<endl<<infos<<endl;  
    for(multiset<int>::const_iterator p=set1.begin();p!=set1.end(); ++p)  
        cout<<*p<<" "; 
}

int _tmain(int argc, _TCHAR* argv[])  
{
	//构造函数
	set <int> set0;  
	set <int> set1(ar, ar+20);    
	set <char> set3(str,str+strlen(str)); 
	set <int> set4(set1); 

	multiset <int> multiset5(ar, ar+20); 

	showMultiset("原multiset5  ",multiset5);
	showSet("原set1  ",set1);

	//在set1第一个的位置上插入成员5,返回新元素的位置
	set<int>::iterator it=set1.insert(++set1.begin(),5);
	cout<<endl<<"insert(++set1.begin(),5)="<<*it;
	showSet("insert(++set1.begin(),5)  ",set1);

	//返回pair,第二个值表示是否插入成功
	pair<set<int>::iterator, bool> insertPair=set1.insert(512);
	cout<<endl<<"insert(512)="<<insertPair.second;
	showSet("insert(512)  ",set1);

	//find
	set<int>::iterator set_it=set1.find(33);
	if (set_it != set1.end()) 
	cout<<endl<<"find(33) OK,found="<<*set_it;
	else
	cout<<endl<<"find(33) not found!";

	//删除成员
	set1.erase(++set1.begin(),--set1.end());
	showSet("erase(++set1.begin(),--set1.end())  ",set1);

    //显示状态信息
    cout<<endl<<"set1.size(): "<<set1.size()<<endl;//打印成员个数
    cout<<"set1.empty(): "<<set1.empty();//是否为空

	//清除
	set1.clear();
	showSet("clear()  ",set1);
	cout<<endl<<"set1.size(): "<<set1.size()<<endl;//打印成员个数
	cout<<"set1.empty(): "<<set1.empty();//是否为空
	getchar();
	return 0;
}

运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值