除留余数法实现哈希表,开vector法解决冲突

class HashTable
{
private:
	vector<vector<pair<int, int> > >data;
    //这个函数只是对内的,不对外开放,所以设成private
	int Hash(int x)
	{
		return x%data.size();
	}

public:
	//实现unordered_map的find函数 if(m.find(x)!=m.end()相当于if(m.contain(x)))
	bool contain(int x)
	{
		for (auto y : data[Hash(x)])
		{
			if (y.first == x)
				return true;
		}
		return false;
	}

	int& operator[](int x)
	{
		for (auto& f : data[Hash(x)])
		{
			if (f.first == x)
			{
				return f.second;
			}
		}
		data[Hash(x)].push_back(make_pair(x, 0));
		return data[Hash(x)].back().second;
	}

	//实现unordered_map的erase函数 m.erase(x)相当于m.erase(x))
	void erase(int x)
	{
		for (int i = 0; i < data[Hash(x)].size(); ++i)
		{
			if (data[Hash(x)][i].first == x)
				data[Hash(x)].erase(data[Hash(x)].begin() + i);
		}
	}

    //构造函数,用于初始化类的数据。除了构造函数,这个类里面的都是成员函数
	HashTable()
	{
		data.resize(19);
	}

};

猜你喜欢

转载自blog.csdn.net/scarlett_guan/article/details/78808013