나는 자바로 쓴 몇몇 프로그램을 변환하여 C++을 배우려고한다. 하나는 텍스트 입력을 받아서 DNA처럼 보이도록 만드는 암호화 프로그램입니다 (AGCTGTGCT ...). 나는 각각 4 개의 기본 256 코돈을 사용하여 64 문자를 암호화 할 수있다. ("A"= "TGGC", "B"= "ATGC"...) java에서 나는 키가 암호화 될 문자이고 값이 각각 4 개 문자열의 배열 인 hashmap<String, String[]>
을 만듭니다. 암호화 된 문자를 무작위로 선택하는 코돈.은 C++에서 map <string, string []>이 가능합니까?
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 개 encodable 문자를 보유하고 배열 (그들은 정말 문자열)과 originalCodonList
인 256 개 코돈을 포함하는 문자열 배열입니다 : 여기 코돈 테이블을 만들려고 코드입니다. 지도에서 문자열 배열에 4 개의 코돈을 지정하는 여러 방법을 시도했지만 아무 것도 실제로 작동하지 않는 것 같습니다. 이렇게하면 오류가 가장 적은 스팸이 생성됩니다. 컴파일 할 때 출력은 다음과 같습니다.
In file included from /usr/include/c++/4.6/map:61:0, from Genencrypt.cpp:4: /usr/include/c++/4.6/bits/stl_map.h: In member function ‘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::allocatorstd::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: instantiated from here /usr/include/c++/4.6/bits/stl_map.h:453:11: error: conversion from ‘int’ to non-scalar type >‘std::map, std::basic_string [4]>::mapped_type {aka >std::basic_string [4]}’ requested
물론 Google은 내가 Google에 복사 할 때 너무 길다는 것을 알려줍니다. 나는 자바의 전문가가 아니며, 나는 C++보다 자바가 훨씬 낫다.
TL : DR : 나는 map<string, string[]>
을 C++로 만들고 싶습니다. 어떻게 할 수 있습니까?
편집 : 나는 그것을 해결 방법은 다음이고, 나는 map<string, vector<string> >
에 map<string. string[]>
에서 codonList을 변경하고 코돈
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;
}
나는 OP가 C++을 의미한다고 생각한다. – Anon
당신의 제목은 C와 C에 관한 질문 자체에 대해 이야기한다. 제목이 잘못된 것 같습니다. – juanchopanza
고쳐 주신 덕분에 – user137