是否可以在 C++ 中表征整数数组?一旦特征化,包含相同元素集的数组将具有相同的特征。我在考虑hashcode行,每个 hashcode 将唯一标识一个数组!
例如ary[]={4,5,3,2,4}
,ary_two[]={4,4,2,3,5}
两者都应该具有相同的特征/哈希码!
我正在尝试解决这个问题(在采访中提出):正在生成许多可变大小的数组。对于每个数组,确定我们是否在包含与该数组相同的元素之前遇到过一个数组!
一种可能的解决方案是使用元素散列本身(假设数组的内容是可散列的)。xor
然后只需将它们与一些合适的功能(例如 an或更好的功能)折叠在一起+
。确保折叠函数是可交换和关联的,否则数组的顺序会有所不同。
调查std::hash。你可能可以重载它来做你想做的事。例如,如果您希望数组具有值{4, 5, 3, 2, 4}
并{4, 4, 2, 3, 5}
散列到相同的值,您可以像这样专门化它:
template<> struct hash<std::array<int, 5>>
{
size_t operator()(const std::array<int, 5> &ary) const
{
return std::accumulate(std::begin(ary), std::end(ary), 0U) * 16777619;
}
};