压缩多个嵌套的For循环

压缩多个嵌套的For循环

我只有8个字符,相对较小的std::unordered_map<char, int>。但是,我想遍历它们并将每个字符设置为值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/

10-11 20:38