//等概率返回容器中的东西
#include<iostream>
#include<unordered_map>
#include<ctime>
#include<cstdlib>
using namespace std;
class RandomPool{
private:
unordered_map<char, int> key2index;
unordered_map<char, int> index2key;
int size;
public:
RandomPool(){
size =0;
}
void add(char c){
key2index.insert(make_pair(c,size));
index2key.insert(make_pair(size,c));
size++;
}
void Delete(char key){
if(!key2index.count(key)){
return ;
}
int lastindex = --size;
int deleteIndex = key2index.find(key)->second;
char lastkey = index2key.find(lastindex)->second;
index2key[deleteIndex] = lastkey;
index2key.erase(lastindex);
key2index[lastkey]=deleteIndex;
key2index.erase(key);
}
char getRandom(){
srand((unsigned int)time(0));
return index2key[rand() % size];
}
};
int main(){
RandomPool pool;
pool.add('a');
pool.add('b');
pool.add('c');
pool.add('d');
cout << pool.getRandom() <<endl;
cout << pool.getRandom() <<endl;
pool.Delete('a');
cout << pool.getRandom() <<endl;
cout << pool.getRandom() <<endl;
}