0

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

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

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

4

2 回答 2

2

一种可能的解决方案是使用元素散列本身(假设数组的内容是可散列的)。xor然后只需将它们与一些合适的功能(例如 an或更好的功能)折叠在一起+。确保折叠函数是可交换和关联的,否则数组的顺序会有所不同。

于 2012-11-05T00:18:53.550 回答
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;
    }
};
于 2012-11-05T00:24:38.483 回答