且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

linux下练习 c++ 容器set、multimset的特性

更新时间:2022-05-04 19:08:40

print.h

//print.h

#include <iostream>

using namespace std;

#ifndef print_fun

#define print_fun

template<typename T>

///显示序列数据

void print(T b,T e,char c=' ')

{

	bool isExit=false;

	while (b!=e)

	{

		cout<<*b++<<c;

		isExit=true;

	}

	if(isExit) cout<<endl;



}

template<typename K,typename V>

ostream& operator<<(ostream& o,const pair<K,V>& p)//重载输出map类型元素

{

	return o<<p.first<<':'<<p.second;

}

#endif


 

set.cpp

/*

set特性

元素就是key=value

不允许重复

*/

#include<set>

#include<iostream>

using namespace std;

#include<string>

#include<fstream>
#include"print.h"

int main()

{

	set<string> ss;//定义容器

	string s;//

	ifstream fin("maillist.txt");

	if(!fin)

	{

		return 1;

	}

	while(fin>>s) ss.insert(s);

	print(ss.begin(),ss.end());

}

结果:
linux下练习 c++ 容器set、multimset的特性

 

 

multiset.cpp

/*

set特性

元素就是key=value

允许重复key

*/

#include<set>

#include<iostream>

using namespace std;

#include<string>

#include<fstream>

#include<map>
#include"print.h"

int main()

{

	multiset<string> ms;

	string s;

	ifstream fin("maillist.txt");

	if(!fin)

	{

		return 1;

	}

	while(fin>>s) ms.insert(s);

	print(ms.begin(),ms.end());

	multiset<string>::iterator ib=ms.begin(),ie;

	multimap<int,string> mis;

	while(ib!=ms.end())

	{

		mis.insert(make_pair(ms.count(*ib),*ib));//排好序的一段

		ib=ms.upper_bound(*ib);

	}

	print(mis.begin(),mis.end());

	return 0;

}

 

maillist.txt  

ppp1@qq.com

ppp2@qq.com

ppp3@qq.com

ppp2@qq.com

ppp2@qq.com

ppp1@qq.com

ppp1@qq.com



 

结果:

linux下练习 c++ 容器set、multimset的特性