gpt4 book ai didi

c++ - 在 C++ 中从 map 的随机子集创建新 map

转载 作者:行者123 更新时间:2023-11-28 01:55:50 25 4
gpt4 key购买 nike

我有一张 map std::map<unsigned int,double> areas我想从中抽取一个随机大小的随机子集(均匀分布)。到目前为止,我知道如何选择一个随机元素。

const int range_from  = 1;
const int range_to = areas.size();
std::random_device rand_dev;
std::mt19937 generator(rand_dev());
std::uniform_int_distribution<int> distr(range_from, range_to);
std::map<unsigned int,double>::iterator rand_element;
auto itrtr = ++areas.begin();
std::advance(itrtr, distr(generator));
unsigned int random_key = itrtr->first;
rand_element = areas.find(random_key);

我将如何扩展这个算法?或者不同的 ansatz 会更好吗?

最佳答案

m.s.的帮助下的评论和Johnny Mnemonic的回答至 this question ,我可以想出这个解决方案:

std::map<unsigned int,double> areas;
areas = computeAreas(); //fill areas map
areas[0] = 0;
std::vector<unsigned int> v;
// copy map keys to vector
for(auto it = ++areas.begin();
it != areas.end(); ++it) {
v.push_back(it->first);
}
// randomize vector elements
std::random_shuffle(v.begin(), v.end());
auto it=v.begin();

for(auto& i:areas){
double values=i.second;
i.second=areas[*it];
areas[*it]=values;
it++;
}

关于c++ - 在 C++ 中从 map 的随机子集创建新 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41224446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com