是否可以在C ++中表征整数数组?一旦表征,包含相同元素集的数组将具有相同的特征。 我正在考虑 hashcode 的行,每个哈希码将唯一地标识一个数组!
例如ary[]={4,5,3,2,4}
和ary_two[]={4,4,2,3,5}
都应该具有相同的特征/哈希码!
我正试图解决这个问题(在采访中提到):正在生成许多可变大小的数组。对于每个数组,确定在包含与此数组相同的元素之前是否遇到过数组!
答案 0 :(得分:2)
一种可能的解决方案是使用元素哈希本身(假设数组的内容是可清除的)。然后将它们与一些合适的函数(例如xor
或更好的+
)折叠在一起。确保折叠函数是可交换的和关联的,或者数组的顺序会有所不同。
答案 1 :(得分:2)
调查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;
}
};