Случайный элемент на карте

Мне нравится ответ Джеймса, если random-generator карта маленькая или вам не cxx нужно очень часто случайное rand значение. Если он большой random-generator и вы делаете это достаточно random-generator часто, чтобы сделать скорость prng важной, вы можете сохранить random-sample отдельный вектор значений prng ключа для выбора случайного rand значения.

map<...> MyMap;
vector<...> MyVecOfKeys; // <-- add keys to this when added to the map.

map<...>::key_type key = MyVecOfKeys[ random_0_to_n(MyVecOfKeys.size()) ];
map<...>::data_type value = MyMap[ key ];

Конечно, если карта random-numbers действительно огромна, вы map не сможете хранить копии prng всех ключей вот так. Если random-numbers вы можете себе это позволить, вы random получаете преимущество поиска random в логарифмическом времени.

c++

random

map

2022-09-22T01:14:30+00:00