在c ++中检索std :: map的随机键元素

use*_*608 10 c++ std map

如何在c ++中获取std :: map的随机密钥?使用迭代器?我不希望维护额外的数据结构

Yuu*_*shi 22

std::map迭代器是双向的,这意味着选择一个随机密钥O(n).在不使用其他数据结构的情况下,基本上您唯一的选择是使用std::advance随机增量begin().例如:

std::map<K, V> m;
auto it = m.begin();
std::advance(it, rand() % m.size());
K random_key = it->first;
Run Code Online (Sandbox Code Playgroud)

(或者如果你有权访问,可以换掉rand()(例如)).std::mt19939<random>