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的主要内容,如果未能解决你的问题,请参考以下文章
为 unordered_map 定义自定义散列函数和相等函数
当用户在 unordered_map 中自定义哈希函数时,无法解码 g++ 中的模糊编译器错误