Я пытаюсь построить карту от mpz_t
ключей до uint
значений. Я не знаю, почему, но клавиши mpz_t
можно каким-то образом не искать на карте.Использование mpz_t как ключа для std :: map
mpz_t leftSideValues[1 << 20];
int main()
{
std::map<mpz_t, uint> leftSide;
for (uint i = 0; i < 1 << 20; i++)
{
mpz_init(leftSideValues[i]);
// compute some stuff here...
// now save the computed value to our map
leftSide[leftSideValues[i]] = i;
// do a lookup to see whether our value can be found
std::cout << leftSide.at(leftSideValues[i]) << " -- " << i << std::endl;
}
return 0;
}
Ожидаемый результат будет много линий, похожих на «0 - 0», «1 - 1» и т.д., но этого не происходит. Вместо этого:
terminate called after throwing an instance of 'std::out_of_range' what(): map::at
Есть ли какой-либо другой шаг, который мне нужно предпринять, чтобы сделать mpz_t
быть полезной в карте?
Когда я пытаюсь скомпилировать с последней версией лязгом ++ вместо г ++, я получаю много ошибок компиляции. Похоже, что 'mpz_t' - это typedef типа, который не может использоваться как ключ в' std :: map'. –
@JoachimPileborg Какие критерии должен выполнять тип ключа, чтобы иметь право на использование на карте? Глядя на http://gmplib.org/manual/Integer-Internals.html#Integer-Internals, кажется, что 'mpz_t' является просто своего рода' struct'. Могут ли они не использоваться в качестве типа ключа? – Chris
Возможный дубликат http://stackoverflow.com/q/4254906/1401351 – Peter