我正在尝试通过转换我用java编写的一些程序来学习C++。一种是加密程序,它接受文本输入并使其看起来像 DNA(AGCTGTGCT...)。我可以使用 4 个碱基的 256 个密码子加密 64 个字符。( "A" = "TGGC", "B" = "ATGC"...) 在 java 中,我做了一个hashmap<String, String[]>
,其中密钥是要加密的字符,值是一个由 4 个字符串组成的数组,其中每个字符串是一个随机选择的密码子来替换加密字符。
在 C++ 中,我试图使用地图来做同样的事情,但它给出了一个我不明白的错误。这是我尝试制作密码子表的代码:
// iterate through the characters and select 4 codons from the list
for(int i = 0; i < 64; i++){
codonTable[charList[i]][0] = originalCodonList[4 * i];
codonTable[charList[i]][1] = originalCodonList[4 * i + 1];
codonTable[charList[i]][2] = originalCodonList[4 * i + 2];
codonTable[charList[i]][3] = originalCodonList[4 * i + 3];
}
}
charList
是包含 64 个可编码字符(它们实际上是字符串)originalCodonList
的数组,是包含 256 个密码子的字符串数组。我尝试了几种方法将 4 个密码子分配给地图中的字符串数组,但似乎没有任何效果。这会产生最少的错误垃圾邮件。这是我编译时的输出:
在 /usr/include/c++/4.6/map:61:0 包含的文件中,来自 Genencrypt.cpp:4:/usr/include/c++/4.6/bits/stl_map.h:在成员函数 'std::map< _Key, _Tp, _Compare, >_Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) >[with _Key = std::basic_string, _Tp = std::basic_string [4], _Compare = >std::less >, _Alloc = std::allocatorsstd::basic_string, std::basic_string [4]> >, std::map<_Key, _Tp, _Compare, >_Alloc>::mapped_type = std::basic_string [4], std::map<_Key, _Tp, _Compare, >_Alloc>::key_type = std::basic_string]': Genencrypt.cpp:63:25: 从这里 /usr/include/ 实例化c++/4.6/bits/stl_map.h:453:11: 错误:从'int'转换为非标量类型>'std::map, std::basic_string [4]>::mapped_type {aka >std::basic_string [4]}' 请求
当然,当我将它复制到谷歌时,谷歌告诉我它太长了。我不是 java 专家,而且我在 java 方面比在 c++ 方面要好得多。
TL;DR:我想map<string, string[]>
用 C++ 做一个,有可能吗?怎么做?
编辑:这是我修复它的方法,我将 codonList 从更改map<string. string[]>
为map<string, vector<string> >
并使用此代码添加密码子
for(int i = 0; i < 64; i++){
codonTable[charList[i]].push_back(originalCodonList[4 * i]);
codonTable[charList[i]].push_back(originalCodonList[4 * i + 1]);
codonTable[charList[i]].push_back(originalCodonList[4 * i + 2]);
codonTable[charList[i]].push_back(originalCodonList[4 * i + 3]);
std::cout << "Working?" << std::endl;
}