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;
}
运行结果: