为Multimap中的特定键选择随机元素

Ros*_*oss 1 c++ std

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

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"));
Run Code Online (Sandbox Code Playgroud)

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

我知道我可以获得"哺乳动物"的迭代器所以:

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

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

Nim*_*Nim 5

插入评论作为答案:

  1. 获取迭代器范围 - 您已经拥有它
  2. 计算范围的大小

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

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

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

  4. 将迭代器移动到该位置

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

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