相关疑难解决方法(0)

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

如何选择一个随机元素std::set

我天真地试过这个:

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

但这operator+是不允许的.

c++ iterator set

29
推荐指数
1
解决办法
2万
查看次数

来自O(1)中unordered_set的随机元素

我见过人们提到可以在O(1)时间内从unordered_set中获取随机元素.我试图这样做:

std::unordered_set<TestObject*> test_set;

//fill with data

size_t index = rand() % test_set.size();
const TestObject* test = *(test_set.begin() + index);
Run Code Online (Sandbox Code Playgroud)

但是,unordered_set迭代器不支持带整数的+. begin可以给出一个size_t参数,但它是一个桶而不是一个元素的索引.随机挑选一个桶然后在其中随机挑选一个元素将导致非常不平衡的随机分布.

适当的O(1)随机访问的秘诀是什么?如果重要,这是在VC++ 2010中.

c++ stl unordered-set

10
推荐指数
3
解决办法
5193
查看次数

标签 统计

c++ ×2

iterator ×1

set ×1

stl ×1

unordered-set ×1