从地图中选择随机元素的好方法是什么?C++.据我所知,地图没有随机访问迭代器.密钥很长,地图人口稀少.
map<...> MyMap; iterator item = MyMap.begin(); std::advance( item, random_0_to_n(MyMap.size()) );
如果地图很小或者你不经常需要随机值,我喜欢詹姆斯的回答.如果它很大并且您经常这样做以使速度变得重要,那么您可以保留一个单独的键值向量来从中选择随机值.
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 ];
当然,如果地图真的很大,你可能无法存储这样的所有键的副本.如果你能负担得起,虽然你可以在对数时间内获得查找的优势.
也许绘制一个随机密钥,然后使用lower_bound来查找实际包含的最近密钥.