如何在 std::set 中选择随机元素?

How to select a random element in std::set?(如何在 std::set 中选择随机元素?)

本文介绍了如何在 std::set 中选择随机元素?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在 std::set 中选择随机元素?

How can I select a random element in an std::set?

我天真地尝试过这个:

int GetSample(const std::set<int>& s) {
  double r = rand() % s.size();
  return *(s.begin() + r); // compile error
}

但是operator+是不允许这样的.

推荐答案

你可以使用 std::advance 方法.

#include <set>
#include <algorithm>

int main() {
  using namespace std;
  // generate a set...
  set<int> s;
  for( int i = 0; i != 10; ++i ) s.insert(i);
  auto r = rand() % s.size(); // not _really_ random
  auto n = *select_random(s, r);
}

在哪里

template<typename S>
auto select_random(const S &s, size_t n) {
  auto it = std::begin(s);
  // 'advance' the iterator n times
  std::advance(it,n);
  return it;
}

这篇关于如何在 std::set 中选择随机元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

版权声明:本站部分内容来源互联网,如果文章中所涉及的图片或者文字内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

本文标题为:如何在 std::set 中选择随机元素?

基础教程推荐