有如下结构体
struct Word {
int len = 0;
int ascii = 0;
Word(string str)
{
len = str.length();
for (char c : str)
{
ascii += c;
}
}
};
需要使用如下场景
unordered_map>m;
这里需要实现哈希函数和重载()函数
struct Hash
{
std::size_t operator()(const Word& word) const
{
using std::size_t;
using std::hash;
return ((hash()(word.len)
^ (hash()(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, Hash, Equal> m; vector > ret; for (auto& str : strs) { Word w(str); auto iter = m.find(w); if (iter == m.end()) { vector v; v.push_back(str); m.insert(pair >(w, v)); } else { iter->second.push_back(str); } } for (auto it = m.begin(); it != m.end(); it++) { ret.push_back(it->second); }



