Я пытаюсь использовать неупорядоченную карту, чтобы хэшировать массив размера 2 и искать карту позже. К сожалению, это значительно медленнее, чем когда я использую обычную карту c ++, что я не считаю правильным, потому что вставка и поиск - это O (log (n)) на карте и O (1) на неупорядоченной карте. Следует отметить, что вместо массива я использовал объединенное строковое значение значений в массиве на карте. Я не думаю, что это должно иметь значение, потому что конкатенация строк стоит дороже, чем создание массива размера 2. Я приложил соответствующий код.
Спасибо всем:)
struct arraySizeTwoEqualityStruct
{
bool operator()( const array< double, 2 >& leftArraySizeTwo,
const array< double, 2 >& rightArraySizeTwo ) const
{
return
abs( leftArraySizeTwo[ 0 ] - rightArraySizeTwo[ 0 ] ) < 0.0001 &&
abs( leftArraySizeTwo[ 1 ] - rightArraySizeTwo[ 1 ] ) < 0.0001;
}
};
struct arraySizeTwoHashStruct
{
size_t operator( )( const array< double, 2 >& arrayToHash ) const
{
return ( hash< double > ( ) ( arrayToHash[ 0 ] ) ^ hash< double > ( ) ( arrayToHash[ 1 ] ) );
}
};