unordered_map 自定义结构为Key

Posted 顾文繁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unordered_map 自定义结构为Key相关的知识,希望对你有一定的参考价值。

有如下结构体

struct Word 
	int len = 0;
	int ascii = 0;
	Word(string str)
	
		len = str.length();
		for (char c : str)
		
			ascii += c;
		
	
;

需要使用如下场景

unordered_map<Word, vector<string>>m;

这里需要实现哈希函数和重载()函数

struct Hash

	std::size_t operator()(const Word& word) const
	
		using std::size_t;
		using std::hash;

		return ((hash<int>()(word.len)
			^ (hash<int>()(word.ascii) << 1)) >> 1);
	
;

struct Equal

	bool operator () (const Word& lhs, const Word& rhs) const
	
		return lhs.len == rhs.len
			&& lhs.ascii == rhs.ascii;
	
;

然后就可以使用ordered_map了

unordered_map<Word, vector<string>, Hash, Equal> m;
		vector<vector<string>> ret;
		for (auto& str : strs)
		
			Word w(str);
			auto iter = m.find(w);
			if (iter == m.end())
			
				vector<string> v;
				v.push_back(str);
				m.insert(pair<Word, vector<string>>(w, v));
			
			else
			
				iter->second.push_back(str);
			
		

		for (auto it = m.begin(); it != m.end(); it++)
		
			ret.push_back(it->second);
		

以上是关于unordered_map 自定义结构为Key的主要内容,如果未能解决你的问题,请参考以下文章

c++ unordered_map 自定义key

自定义 unordered_map 的哈希函数

为 unordered_map 定义自定义散列函数和相等函数

无法专门化std :: hash来存储unordered_map中的自定义类型

unordered_map和map的区别

使用自定义类类型作为键的 C++ unordered_map