1

如何为多图中的特定键选择随机元素。例如:

multimap<string, string> map;
map.insert(pair<string, string>("Mammal", "Tiger"));
map.insert(pair<string, string>("Mammal", "Chicken"));
map.insert(pair<string, string>("Mammal", "Fox"));
map.insert(pair<string, string>("Fish", "Clown Fish"));
map.insert(pair<string, string>("Fish", "Ray"));

在上面,获得随机“哺乳动物”的最佳方法是什么?

我知道我可以得到“哺乳动物”的迭代器,所以:

pair<MultiMapIt,MultiMapIt>iterators = mMultiMap.equal_range("Mammal");
// loop through each... and select one.

但我确信有更好的解决方案......也许使用迭代器作为数字......
谢谢

4

1 回答 1

5

插入评论作为答案:

  1. 获取迭代器范围 - 你已经有了
  2. 计算范围的大小

    std::size_t sz = std::distance(iterators.first, iterators.second);

  3. 现在生成一个随机索引:

    std::size_t idx = std::rand() % sz; // stupid example

  4. 将迭代器移动到idx-th 位置:

    std::advance(iterators.first, idx);

现在iterators.first指着一个随机的哺乳动物。

于 2012-07-11T11:49:32.450 回答