您的位置:首页 > 其它

Set & MultiSet

2013-09-13 16:12 239 查看
/*
Set VS. Multiset

@author arhaiyun

*/
#include "stdafx.h"
#include <set>
#include <iostream>

using namespace std;

/*

C++ STL set和multiset的使用
set的含义是集合,它是一个有序的容器,里面的元素都是排序好的,支持插入,删除,查找等操作,就像一个集合一样。所有的操作的都是严格在logn时间之内完成,效率非常高。 set和multiset的区别是:set插入的元素不能相同,但是multiset可以相同。
创建 multiset<ss> base;
删除:如果删除元素a,那么在定义的比较关系下和a相等的所有元素都会被删除
base.count( a ):set能返回0或者1,multiset是有多少个返回多少个.
Set和multiset都是引用<set>头文件,复杂度都是logn

[basic operations]
begin()/rbegin();
end()/rend();
clear();
empty();
earse(*iterator);
iterator find();
insert();
max_size();
size();
swap();
upper_bound();
value_comp();
*/

typedef struct{
int index;
char pc;
}DataType;

struct compare
{
bool operator()(const DataType &m, const DataType &n) const
{
return m.pc < n.pc;
}
};

multiset<DataType, compare> dataSet;

int main(int argc, char* argv[])
{
DataType a, b, c, d;
a.index = 1;
a.pc = 'd';

b.index = 2;
b.pc = 'b';

c.index = 3;
c.pc = 'c';

d.index = 4;
d.pc = 'a';

dataSet.insert(a);
dataSet.insert(b);
dataSet.insert(c);
dataSet.insert(c);//if set : can't insert c again
dataSet.insert(d);

multiset<DataType, compare>::iterator iter = dataSet.begin();

for(; iter != dataSet.end(); iter++)
{
cout<<(*iter).index<<" ";
}

cout<<endl;

iter = dataSet.begin();
for(; iter != dataSet.end(); iter++)
{
cout<<(*iter).pc<<" ";
}

cout<<endl;

multiset<DataType, compare>::reverse_iterator r_iter;
r_iter = dataSet.rbegin();
for(; r_iter != dataSet.rend(); r_iter++)
{
cout<<(*r_iter).pc<<" ";
}

cout<<endl;

iter = dataSet.begin();
dataSet.erase(c);
for(; iter != dataSet.end(); iter++)
{
cout<<(*iter).pc<<" ";
}

dataSet.clear();

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: