設計RandomPool結構(C++實現)

參考博客
代碼:

#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];
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章