如何使用对迭代所有可能的字符对?

时间:2016-04-13 06:15:28

标签: c++ dictionary std-pair

我尝试做的是将 $CI =&get_instance(); $CI->load->model('articles_model'); $parameter = $CI->articles_model>getarticle($id); 的所有值初始化为1,其中对中的字符只包含小写字母和空格。

即。我想初始化所有地图m [' a'' a'] m [' a' a' b'] ... m [' z',' z']到1.有没有简单的方法可以做到这一点?

如果有帮助,我试图解密使用替换密码加密的消息,我必须为所有字母对创建双字节。

3 个答案:

答案 0 :(得分:2)

尝试做这样的事情:

for(char i = 'a'; i<='z'; i++){
    for(char j = 'a'; j<='z'; j++){
        m.insert(make_pair(make_pair(i,j),1));
    }
}

答案 1 :(得分:1)

要处理'a''z'之间存在其他字符(例如EBCDIC)的棘手案例,您可以这样做:

std::map<std::pair<char, char>, double> m;
const auto letters = {
    'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
    'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
};
for (auto c1 : letters) {
    for (auto c2 : letters) {
        m.emplace(std::make_pair(c1, c2), 1.);
    }
}

Demo

Boost允许letters的初始化:

const auto letters = "abcdefghijklmnopqrstuvwxyz"
                     | boost::adaptors::sliced(0, 26); // remove trailling '\0'

Demo

答案 2 :(得分:0)

for (char i = 'a'; i <= 'z'; ++i){
    for (char j = 'a'; j <= 'z'; ++j){
        m[std::make_pair(i, j)] = 1;
    }
}
为了至于清晰起见,

将难以更好。