在 unordered_map 中选择随机元素

新手上路,请多包涵

我定义了一个 unordered_map 像这样:

 std::unordered_map<std::string, Edge> edges;

有没有一种从 unordered_map 边缘中选择随机边缘的有效方法?

原文由 Joe Cool 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
1 个回答

C++11 之前的解决方案:

 std::tr1::unordered_map<std::string, Edge> edges;
std::tr1::unordered_map<std::string, Edge>::iterator random_it = edges.begin();
std::advance(random_it, rand_between(0, edges.size()));

C++11 以后的解决方案:

 std::unordered_map<std::string, Edge> edges;
auto random_it = std::next(std::begin(edges), rand_between(0, edges.size()));


选择有效随机数的函数由您选择,但当 edges 不为空时,请确保它返回的数字在 [0 ; edges.size() - 1] 范围内。

std::next --- 函数以允许直接赋值的方式简单地包装了 std::advance 函数。

原文由 Chnossos 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题