我的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 :(得分:2)
如果我说得对,你想迭代所有可能的组合,如何将值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
}