文章目录
 
 
hash表 O(1)
 
 
 
840. 模拟散列表
 
 
#include <iostream>
using namespace std;
#include<cstring>
const int N = 100003;   
int first_prim(int x) {
	for(int i = x; ; i++) {  
		bool flag = true;
		for(int j = 2; j * j<= i; j++) {
			if(i % j == 0) {
				flag = false;
				break;
			}
		}
		if(flag) {
			cout << i << endl;
			break;
		}
	}
	return 0;
}
int h[N],e[N],ne[N],idx;   
void insert(int x) 
{	
	int k = (x % N + N) % N;   
	e[idx] = x;   
	ne[idx] = h[k];	
	h[k] = idx++;    
}
bool find(int x)
{
	int k = (x % N + N ) % N ;
	for(int i = h[k]; i != -1;i = ne[i])  
		if(e[i] == x)
			return true;
			
	return false; 
}
int test_01()
{
	int n;
	scanf("%d",&n);
	
	memset(h,-1,sizeof(h));
	
	
	while(n--)
	{
		char op[2];
		int x;
		scanf("%s%d",op,&x);
		
		if(*op == 'I') insert(x);
		else
		{
			if(find(x)) puts("Yes");
		 	else puts("No");  
		}
	}
	
	return 0; 
} 
 
开放寻址法:
 
 
#include<cstring>
const int N = 200003, null = 0x3f3f3f3f;
int h[N];
int find(int x)
{
	int k = (x % N + N) % N ;   
	
	while(h[k] != null && h[k] != x)  
	{
		k ++;
		if(k == N) k = 0;
	}
	return k;
} 
int test_02()
{
	int n;
	scanf("%d",&n);
	
	memset(h,0x3f,sizeof(h)); 
	
	
	while(n--)
	{
		char op[2];
		int x;
		scanf("%s%d",op,&x);
		
		int k = find(x); 
		if(*op == 'I')
		{
			
			h[k] = x; 
		}
		else
		{
			
			if(h[k] != null) puts("Yes");
		 	else puts("No");  
		}
	}
	
	return 0; 
} 
 
***字符串前缀hash法 (高效判断字符串-优于kmp)
 
 
 
 
 
 
typedef unsigned long long ULL;  
const int N = 100010,P = 131; 
int n,m;
char str[N];
ULL h[N],p[N];   
ULL get(int l,int r)  
{
	return h[r] - h[l - 1] * p[r - l + 1];	
}
int test_03()
{
	scanf("%d%d%s",&n,&m,str + 1);  
	
	p[0] = 1;
	for(int i = 1;i <= n;i++) 
	{
		p[i] = p[i - 1] * P; 
		h[i] = h[i - 1] * P + str[i]; 
	 } 
	
	while(m--)
	{
		int l1,l2,r1,r2;
		scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
		
		if(get(l1,r1) == get(l2,r2)) puts("Yes");
		else puts("No");
		
	}
		
	return 0;
}
 
STL 常用容器
 
 
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
 
vector
 
 
string 字符串
 
 
pair 【自带了一个比较函数,比较first】
 
 
queue
 
 
优先队列 (大根堆)
 
 
stack
 
 
deque 双端队列 (功能全, 但缺点:速度慢很多)
 
 
set / multiset
 
 
 
bitset ,压位
 
 
#include<bits/stdc++.h>  
int test_04()
{
	vector<int> a;
	a.size();  
	a.empty(); 
	a.clear(); 
	
	for(int i = 0;i < 10;i++) a.push_back(i);
	
	for(int i = 0;i < a.size();i++) cout << a[i] << " ";
	cout << endl;
	
	for(vector<int>::iterator i = a.begin() ;i != a.end();i++) cout << *i << " ";
	cout << endl;
	
	
	cout << endl;
	
	
	
	
	
	return 0;	
} 
int test_05()
{
	pair<int , string> p;
	
	p = make_pair(10,"wz");
	p = make_pair(20,"abc");
	
	
	pair<int, pair<int,string> > pp;
	
	
	
	priority_queue<int> heap;
	int x;cin >> x;
	heap.push(-x); 
	cout << heap.top() << endl;
	
	
	priority_queue<int,vector<int> ,greater<int> > small_heap;
	
	
	
	map<string , int> a;
	
	a[];
	
	
}
 
int main() {
	
	test_05();
	
	return 0;
}