gpt4 book ai didi

c++ - 压缩多个嵌套的 For 循环

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

我有一个比较小的std::unordered_map<char, int>只有8个字符。但是,我想遍历它们并将每个字符设置为 0-9 的值。

字符是 d, e, m, n, o, r, s, y .

我可以按照以下方式做一些事情:

std::unordered_map<char, int> letters;
for(int d = 0; d < 10; ++d)
for(int e = 0; e < 10; ++e)
for(int m = 0; m < 10; ++m)
// continued
letters['d'] = d; // etc...

但这似乎一点也不谨慎,而且随着字母数的增加,也变得越来越乏味。必须有更好的方法来做到这一点。

最佳答案

如果我没听错,您想遍历所有可能的组合,如何将值 0-9 分配给 8 个字母。

在这种情况下,我们想到了数字的一个很好的特性:我们使用十进制。所以你正在寻找 8 位数的数字,然后将每个数字与一个字母配对:

00000000 - 99999999
|||||||| ||||||||
demnorsy demnorsy

当然你可以对其他数字做同样的事情,但是很容易看出十进制的想法。

所以简单的方法是:

std::unordered_map<char, int> letters;
std::vector<char> chars= {'d', 'e', 'm', 'n', 'o', 'r', 's', 'y'};
for (int N=0; N<pow(10,chars.size()); ++N){
for(int i=0; i<chars.size();++i)
letters[chars[i]] = (N/pow(10,i))%10; //integer division

//whatever you want to do with your permutation, do it here
}

关于c++ - 压缩多个嵌套的 For 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35445850/

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