是否可以在C++中使用map <string,string []>?

use*_*137 3 c++ string map

我试图通过转换我在java中编写的一些程序来学习C++.一种是加密程序,它接受文本输入并使其看起来像DNA(AGCTGTGCT ...).我可以使用256个密码子(每个4个碱基)加密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];

    }
}
Run Code Online (Sandbox Code Playgroud)

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 :: 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:从这里实例化/ 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 ++ 制作一个,是否有可能以及如何做到这一点?

编辑:这是我如何修复它,我改变了密码子列表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;
    }
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 10

问题是您不能在标准库容器中使用C样式数组,因为它们不满足某些要求,例如可分配和可复制构造.但是,std::array如果您在编译时知道数组的大小,则可以使用容器,如果不知道,则可以使用容器std::vector:

#include <map>
#include <array>
#include <vector>

std::map<std::string, std::array<std::string, 4>> m_fixed;
std::map<std::string, std::vector<std::string>> m_dynamic;
Run Code Online (Sandbox Code Playgroud)

请注意,这std::array是C++ 11的一部分.如果你没有C++ 11的支持,您可以使用TR1版本std::tr1::array<tr1/array>头部,或Boost库的版本.