Один из способов - создать структуру для хранения указателя на последовательность пар:
struct DoubleRegion
{
double* p;
size_t size;
};
bool operator==(DoubleRegion a, DoubleRegion b)
{
return a.size == b.size && memcmp(a.p, b.p, a.size) == 0;
}
size_t hash(DoubleRegion dr)
{
size_t h = 0;
for (double* p = dr.p; p != dr.p + dr.size; ++p)
h ^= hash(*p);
return h;
}
А затем используйте его:
unordered_map<DoubleRegion, DoubleRegion> cache;
Конечно, ваша проблема заключается в том, чтобы убедиться, что срок службы резервной памяти является расширенным набором времени жизни DoubleRegion.
Старый ответ :
Если до времени выполнения вы не знаете, насколько велики будут ключ и значение, используйте std :: vector:
unordered_map<vector<double>, vector<double>> cache;
Если вы знаете во время компиляции, насколько велик вы можете использовать std :: array:
unordered_map<array<double, N>, array<double, N>> cache;
В обоих случаях функция хеширования по умолчанию будет работать по значению так, как вы хотите, и вам не нужно определять пользовательскую.