如何在c ++中唯一地表征数组?

时间:2012-11-05 00:04:39

标签: c++ arrays

是否可以在C ++中表征整数数组?一旦表征,包含相同元素集的数组将具有相同的特征。 我正在考虑 hashcode 的行,每个哈希码将唯一地标识一个数组!

例如ary[]={4,5,3,2,4}ary_two[]={4,4,2,3,5}都应该具有相同的特征/哈希码!

我正试图解决这个问题(在采访中提到):正在生成许多可变大小的数组。对于每个数组,确定在包含与此数组相同的元素之前是否遇到过数组!

2 个答案:

答案 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;
    }
};