Size: a a a

2020 July 28

/

/bin/cat in supapro.cxx
hashCode() не меняется, а вот индексы элементов меняются со временем от размера
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
Ст
void f(const int&)
{
}
void f(int&)
{
}
int n=5;
f(n);
почему здесь работает функция  f(int&)?
https://en.cppreference.com/w/cpp/language/overload_resolution
Ranking of implicit conversion sequences -> 3 -> e
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
/bin/cat
для ключей нет коллизий
Какого типа ключи?
источник

P

Prong in supapro.cxx
/bin/cat
hashCode() не меняется, а вот индексы элементов меняются со временем от размера
Когда тебе нужно расширить вектор, выделяешь новый кусок памяти и перекладываешь значение туда и пересчитываешь хеш, но n уже будет равен размеру нового куска
источник

/

/bin/cat in supapro.cxx
Artöm Bakri Al-Sarmini
Какого типа ключи?
хеш типа size_t
источник

/

/bin/cat in supapro.cxx
ключи tuple из двух интов
источник

/

/bin/cat in supapro.cxx
Prong
Когда тебе нужно расширить вектор, выделяешь новый кусок памяти и перекладываешь значение туда и пересчитываешь хеш, но n уже будет равен размеру нового куска
Да, но разве от этого не теряется суть hashmap? Он должен быть быстрым и без мува при resize
источник

AB

Artöm Bakri Al-Sarmi... in supapro.cxx
/bin/cat
ключи tuple из двух интов
Ты гарантируешь, что sizeof(int) * 2 <= sizeof(size_t) ? Тогда
size_t hash = size_t(x) << (sizeof(int) * CHAR_BITS) + size_t(y);
источник

/

/bin/cat in supapro.cxx
Да, я так и делаю
источник

/

/bin/cat in supapro.cxx
static_cast<size_t>(x << 32) | y
источник

/

/bin/cat in supapro.cxx
но можно и сам tuple кастить к size_t
источник

P

Prong in supapro.cxx
/bin/cat
Да, но разве от этого не теряется суть hashmap? Он должен быть быстрым и без мува при resize
Нет. Вставка у тебя все еще за амортизированную константу. Либо делаешь так, либо забиваешь всю память под мапу и у тебя просто константа
источник

/

/bin/cat in supapro.cxx
Есть вариант выделить дохрена памяти, но resize тоже нужен
источник

P

Prong in supapro.cxx
/bin/cat
Есть вариант выделить дохрена памяти, но resize тоже нужен
Почему нужен?
источник

/

/bin/cat in supapro.cxx
Потому что это кеш и он может меняться
источник

P

Prong in supapro.cxx
/bin/cat
Потому что это кеш и он может меняться
Эмммм хеш на то и хеш, что он не меняется
источник

/

/bin/cat in supapro.cxx
кеш
источник

/

/bin/cat in supapro.cxx
мне нужно иметь доступ O(1) ко всем элементам, чтобы поиск был дешевым
источник

P

Prong in supapro.cxx
Так, а что такое кеш в твоем понимании? для чего он используется?
источник

/

/bin/cat in supapro.cxx
маппит два инта к вектору из weak_ptr
источник