STL unordered类容器浅谈

一个代码:

#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;
}
posted @ 2022-03-19 12:23  PassName  阅读(22)  评论(0编辑  收藏  举报