參考博客
代碼:
#include<bits/stdc++.h>
using namespace std;
class RandomPoll{
public:
unordered_map<string, int> KeyIndexMap;
unordered_map<int, string> IndexKeyMap;
int size;
RandomPoll() : size(0){}
void insert_key(string key)
{
if(KeyIndexMap.find(key) != KeyIndexMap.end())
{
KeyIndexMap.emplace(key,size);
IndexKeyMap.emplace(size,key);
size++;
}
}
void delete_key(string key)
{
if(KeyIndexMap.find(key) != KeyIndexMap.end())
{
int delete_index = KeyIndexMap[key];
int last_index = --size;//size-1
string last_key = IndexKeyMap[last_index];
KeyIndexMap.erase(key);
IndexKeyMap.erase(delete_index);
KeyIndexMap.erase(last_key);
IndexKeyMap.erase(last_index);
KeyIndexMap.emplace(last_key, delete_index);
IndexKeyMap.emplace(delete_index, last_key);
}
}
string get_random_key()
{
int random = rand() % size;
return IndexKeyMap[random];
}
};