我有一个c ++程序,目前正在使用一个使用字符和数字作为键的向量。例如myvector['A'][1] = line.substr(0,7)
。但我需要它作为myvector[1][3] = line.substr(0,7)
工作,所以我可以将两个键用作数字。
在我目前的工作代码中,我有这个:
std::vector<std::vector<std::string> >myvector;
我认为简单地将字符串更改为整数会起作用但我会得到一个&#34;分段错误(核心转储)&#34;或&#34;在赋值&#34;中无法将'std :: basic_string'转换为'int';错误。
std::vector<std::vector<int> >myvector;
我知道错误很模糊,但我是c ++的新手,所以我不知道如何找到错误的任何其他特定命令响应。我在网上浏览过一堆例子,但遗憾的是无法编译其中任何一个。任何援助将不胜感激;谢谢你的时间。
如果我以某种方式使用索引超出我的范围,这就是我输入索引的方式。
myvector[rn].resize(100);
std::ifstream fin(argv[3]);
std::string line;
int rn = 0;
int rln = 0;
while( getline(fin, line) ) {
rn = 0;
while(rn < line.length()/7){
myvector[rn][rln] = line.substr (rn*7,7);
rn++;
}
rln++;
}
当我输出&#34; line.substr(rn * 7,7)&#34;结果完全符合预期我无法将此变量设置为我的向量。此外,最终约为10+,rln以6结束。
答案 0 :(得分:1)
您不必更改任何内容,vector不是关联容器,它只能通过索引访问其数据,这是您的代码中已经发生的事情,因为字符会在需要时自动提升为整数:当您执行时data['A']
,A被视为ASCII编码中的int值。
在任何情况下,如果您的值很稀疏,请考虑使用map<vector<string> >
之类的关联控件。
答案 1 :(得分:1)
在C ++中,字符串是双引号"test"
而不是单个代码'test'
,请尝试:
std::vector<std::vector<std::string> >myvector(3);
myvector[1].resize(10);
myvector[1][3] = "test";
std::cout << myvector[1][3] << std::endl;
使用std :: vector你没有关键概念,实际上你正在调用访问operator[]
。