天天看點

set、unordered_set、unordered_multiset、map、unordered_map、unordered_multimap

#include<cstdio>
#include<vector>
#include<functional>
#include<algorithm>
#include<set>
#include<unordered_set>
#include<map>
#include<unordered_map>
using namespace std;
char s[6][10] = { "Able","was","I","I","saw","elbA" };
int a[7] = { -2,3,1,4,4,7 };
int main()
{
	set<int,greater<int> > GREATER_SET;//自動排序去重按從大到小排,必須加上functional頭檔案
	set<int> SET;//自動排序從小到大
	multiset<int> MULTI_SET;//自動排序不去重不加比較類(greater<int>)預設是從小到大排序
	unordered_set<int> UNORDERED_SET;//不自動排序但去重
	unordered_multiset<int> UNORDERED_MULTISET;//無序不去重集合
	//map的相關系列進行類比即可
	map<string,int> MAP;
	multimap<string, int> MULTI_MAP;
	unordered_map<string, int> UNORDERED_MAP;//通過哈希确定位置,不一定與原始序列相同,主要就是快
	unordered_multimap<string, int> UNORDERED_MULTIMAP;
	//*******************************************************************
	//*******************************************************************
	//先看set系列的輸出
	printf("original:\n");
	for (int i = 0; i < 7; i++)
	{
		printf("%d ", a[i]);
		GREATER_SET.insert(a[i]);
		SET.insert(a[i]);
		MULTI_SET.insert(a[i]);
		UNORDERED_SET.insert(a[i]);
		UNORDERED_MULTISET.insert(a[i]);
	}
	printf("\n");
	printf("GREATER_SET:\n");
	for (set<int, greater<int> >::iterator it = GREATER_SET.begin();
		it != GREATER_SET.end(); it++)
	{
		printf("%d ", *it);
	}
	printf("\n");
	printf("SET:\n");
	for (set<int>::iterator it = SET.begin();
		it != SET.end(); it++)
	{
		printf("%d ", *it);
	}
	printf("\n");
	printf("MULTI_SET:\n");
	for (multiset<int>::iterator it = MULTI_SET.begin();
		it != MULTI_SET.end(); it++)
	{
		printf("%d ", *it);
	}
	printf("\n");
	printf("UNORDERED_SET:\n");
	for (unordered_set<int>::iterator it = UNORDERED_SET.begin();
		it != UNORDERED_SET.end(); it++)
	{
		printf("%d ", *it);
	}
	printf("\n");
	printf("UNORDERED_MULTISET:\n");
	for (unordered_multiset<int>::iterator it = UNORDERED_MULTISET.begin();
		it != UNORDERED_MULTISET.end(); it++)
	{
		printf("%d ", *it);
	}
	printf("\n");
	//再看map系列的輸出
	pair<string, int> psi;
	printf("original:\n");
	for (int i = 0; i < 6; i++)
	{
		printf("%s->%d ", s[i], i);
		MAP[s[i]] = i;
		psi.first = s[i];//char數組自動封裝成string
		psi.second = i;
		MULTI_MAP.insert(psi);
		UNORDERED_MAP[s[i]] = i;
		UNORDERED_MULTIMAP.insert(psi);
	}
	printf("\n");
	printf("MAP:\n");
	for (map<string, int>::iterator it = MAP.begin(); 
		it != MAP.end();it++)
	{
		printf("%s->%d ", it->first.c_str(), it->second);
	}
	printf("\n");
	printf("MULTI_MAP:\n");
	for (multimap<string, int>::iterator it = MULTI_MAP.begin();
		it != MULTI_MAP.end(); it++)
	{
		printf("%s->%d ", it->first.c_str(), it->second);
	}
	printf("\n");
	printf("UNORDERED_MAP:\n");
	for (unordered_map<string, int>::iterator it = UNORDERED_MAP.begin();
		it != UNORDERED_MAP.end(); it++)
	{
		printf("%s->%d ", it->first.c_str(), it->second);
	}
	printf("\n");
	printf("UNORDERED_MULTIMAP:\n");
	for (unordered_multimap<string, int>::iterator it = UNORDERED_MULTIMAP.begin();
		it != UNORDERED_MULTIMAP.end(); it++)
	{
		printf("%s->%d ", it->first.c_str(), it->second);
	}
	printf("\n");
	return 0;
}
           
set、unordered_set、unordered_multiset、map、unordered_map、unordered_multimap

繼續閱讀