如何使用pair遍历所有可能的字符对
How do I iterate through all possible pairs of characters using pair?
我要做的是将map<pair<char, char>, double>
的所有值初始化为1,其中对中的字符仅由小写字母和空格组成。
即,我想初始化所有映射m[‘a','a']m[‘a’,'b']。。。m['z','z']为1。有什么简单的方法可以做到这一点吗?
如果有帮助的话,我将尝试解密使用替换密码加密的消息,并且我必须为所有字母对创建bigram。
尝试这样做:
for(char i = 'a'; i<='z'; i++){
for(char j = 'a'; j<='z'; j++){
m.insert(make_pair(make_pair(i,j),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.);
}
}
演示
Boost允许letters
:的初始化
const auto letters = "abcdefghijklmnopqrstuvwxyz"
| boost::adaptors::sliced(0, 26); // remove trailling ' '
演示
for (char i = 'a'; i <= 'z'; ++i){
for (char j = 'a'; j <= 'z'; ++j){
m[std::make_pair(i, j)] = 1;
}
}
至少为了清楚起见,情况将很难好转。
相关文章:
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 有可能使shared_ptr协变吗
- 有可能在信号处理程序中设置promise吗
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- 是否有可能使用debug_info获取ELF文件的源代码?
- C++,是否有可能/如何定义在.h和.cpp源文件中调用函数的类构造函数
- 尝试使用 indexOf 创建一个 if 语句来检查字符串是否包含字符.有一点麻烦
- 有可能在C++中有类的查找表吗
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 向量的大小是否有可能为 1 但其中的元素数量为零?
- 在 boost::filesystem::p ath 中"/"字符有什么用?
- 是否有可能编写新的叮当声现代化规则?
- 是否有可能通过指向另一个未关联的子对象的指针来获取指向一个子对象的指针?
- 是否有可能通过演绎指南实现整个 std::make_tuple 功能?
- 是否有可能在没有复制的情况下传递 std::vector<int> 作为参数来获得 std::vector<std::array<int, 3>>?
- 是否有可能具有放入容器的移动操作的类型?
- 是否有可能通过溢出 C 中的第一个元素来写入数组第二个元素
- 有可能在同一个字符序列上有一个类似函数的宏和一个类似对象的宏吗