さまざまなテスト(4)と分類コンテナ - unordered_setとunordered_map

セットの前面にある点と相違点をマッピングまだプログラムを直接見、説明するのはあまりをしない、これが実現する唯一のハッシュテーブルである、と述べています

unordered_set

#include <stdexcept提供> 
の#include <ストリング> 
の#include <cstdlib> 
の#include <cstdioを> 
する#include <アルゴリズム> 
の#include <iostreamの> 
する#include <CTIME> 
の#include <unordered_set> 
名前空間STDを使用して、
長いget_a_target_long()
{ 
	長いターゲット= 0。
	裁判所未満<< "ターゲット(0〜" << RAND_MAX << "):"; 
	cinを>>ターゲット。
	ターゲットを返します。
} 
文字列get_a_target_string()
{ 
	長いターゲット= 0。
	チャーBUF [10]。
	裁判所未満<< "ターゲット(0〜" << RAND_MAX << "):"; 
	cinを>>ターゲット。
	snprintf(BUF、10、 "%のLD"、ターゲット)
	文字列(BUF)を返します。
} 
int型compareLongs(CONSTボイド*、CONSTボイド* B)
{
	(長い*(*) - *(長い*)b)のリターン; 
} 

int型compareStrings(CONSTボイド*、CONSTボイド* B)
{ 
	(*(文字列*)> *(文字列*)b)は場合は
		1を返します。
	それ以外の場合(*(文字列*)<*(文字列*)b)の
		戻り値-1; 
	それ以外
		の戻り0; 
} 
ボイドtest_unordered_set(ロング&値)
{ 
	COUT << "\ ntest_unordered_set().......... \ n"; 

	unordered_set <文字列> C;  	
	チャーBUF [10]。

	clock_t timeStart =クロック()。								
	以下のために(長iは= 0; I <値; ++ I)
	{ 
		試み{ 
			のsnprintf(BUF、10、 "%のD"、ランド())。
			c.insert(文字列(BUF));    			 		
		} 
		キャッチ(例外&P){
			COUT << "私は=" << I << "" << p.what()<< ENDL。	 
	COUT << "		
			アボート(); 
		} 
	} 
	COUT << "ミリ秒:" <<(クロック() - timeStart)<< ENDL。		
	COUT << "unordered_set.size()=" << c.size()<< ENDL。//元素个数
	COUT << "unordered_set.max_size()=" << c.max_size()<< ENDL。// 
	COUT << "unordered_set.bucket_count()=" << c.bucket_count()<< ENDL; //篮子个数	 
	COUT << "unordered_set.load_factor()=" << c.load_factor()<< ENDL ; //负载
	COUT << "unordered_set.max_load_factor()=" << c.max_load_factor()<< ENDL; //最大负载	
		自動pItem =見つける(c.begin()、c.end()、ターゲット)。//比c.find(...)慢很多	 
		はcout << "のstd ::、()ミリ秒を見つける:" <<(クロック() - timeStart)<<てendl;		
	}			 

	文字列ターゲット= get_a_target_string()。	
	{ 
		timeStart =クロック()。
		(もし!pItem = c.end())
			はcout << "が見つかり、" << * pItem <<てendl; 
		他の
			裁判所未満<< "が見つかりません!" <<てendl;	
	} 

	{ 
		timeStart =クロック()。		
		自動pItem = c.find(ターゲット)//比はstd ::検索(...)快很多							 
		はcout << "c.find()、ミリ秒:" <<(クロック() - timeStart)<<てendl;		 
		(もし!pItem = c.end())
			はcout << "が見つかり、" << * pItem <<てendl; 
		他の
			裁判所未満<< "が見つかりません!" <<てendl;	
	}	 
}			 
)(メインint型
{ 
	長い整数値。
	裁判所未満<<「どのように多くの要素:」; 
	cinを>>値。
	test_unordered_set(値)。
	0を返します。
}

 業績

 

 

unordered_map

#include<stdexcept>
#include<string>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<ctime>
#include<unordered_map>
using namespace std;
long get_a_target_long()
{
	long target = 0;
	cout<<"target(0~"<<RAND_MAX<<"):";
	cin>>target;
	return target;
}
string get_a_target_string()
{
	long target = 0;
	char buf[10];
	cout<<"target(0~"<<RAND_MAX<<"):";
	cin>>target;
	snprintf(buf, 10, "%ld", target);
	return string(buf);
}
int compareLongs(const void* a, const void* b)
{
	return (*(long*)a - *(long*)b);
}

int compareStrings(const void *a, const void *b)
{
	if(*(string*)a > *(string*)b)
		return 1;
	else if(*(string*)a < *(string*)b)
		return -1;
	else
		return 0;
}
void test_unordered_map(long& value)
{
	cout << "\ntest_unordered_map().......... \n";

	unordered_map<long, string> c;  	
	char buf[10];

	clock_t timeStart = clock();								
	for(long i=0; i< value; ++i)
	{
		try {
			snprintf(buf, 10, "%d", rand());
			c[i] = string(buf);  //特殊的插入方式		
		}
		catch(exception& p) {
			cout << "i=" << i << " " << p.what() << endl;	
			abort();
		}
	}
	cout << "milli-seconds : " << (clock()-timeStart) << endl;		
	cout << "unordered_map.size()= " << c.size() << endl;	//元素个数
	cout << "unordered_map.max_size()= " << c.max_size() << endl;	

	long target = get_a_target_long();		
	timeStart = clock();	

	auto pItem = c.find(target);//map 不用 std::find() 

	cout << "c.find(), milli-seconds : " << (clock()-timeStart) << endl;		 
	if (pItem != c.end())
		cout << "found, value=" << (*pItem).second << endl;
	else
		cout << "not found! " << endl;		
}	
int main()
{
	long int value;
	cout<<"how many elements: ";
	cin>>value;
	test_unordered_map(value);
	return 0;
}

 运行结果

 

 

 

おすすめ

転載: www.cnblogs.com/area-h-p/p/12015966.html