Javaで書いたいくつかのプログラムを変換してC++を学ぼうとしています。1 つは、テキスト入力を受け取り、それを DNA のように見せる暗号化プログラム ( AGCTGTGCT... ) です。それぞれ 4 塩基の 256 個のコドンを使用して 64 文字を暗号化できます。( "A" = "TGGC", "B" = "ATGC"...) Java ではhashmap<String, String[]>
、キーが暗号化される文字で、値が 4 つの文字列の配列である a を作成します。ここで、各文字列は暗号化された文字を置き換えるためにランダムに選択されるコドン。
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]}' が要求されました
もちろん、Googleにコピーすると長すぎると言われます。私は Java の専門家ではなく、C++ よりも Java の方がずっと得意です。
TL;DR: C++ で a を作成したいのですがmap<string, string[]>
、それは可能で、どのように行うのですか?
編集: これが私が修正した方法です。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;
}