-1

我有一个 c++ 程序,目前正在使用一个使用字符和数字作为键的向量。例如myvector['A'][1] = line.substr(0,7)。但是我需要它来工作,myvector[1][3] = line.substr(0,7)这样我就可以将两个键都用作数字。

在我当前的工作代码中,我有这个:

std::vector<std::vector<std::string> >myvector;

我认为只需将字符串更改为整数即可,但我收到“分段错误(核心转储)”或“无法在赋值中将 '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++;
}

当我输出“line.substr (rn*7,7)”时,结果完全符合预期,我只是无法将此变量设置到我的向量中。同样 rn 最终在 10+ 左右, rln 在 6 结束。

4

2 回答 2

1

您无需更改任何内容,vector 不是关联容器,它只能通过索引访问其数据,这是您的代码中已经发生的事情,因为 chars 在需要时会自动向上转换为 int:当您这样做时data['A'],A 是在 ASCII 编码中被视为它的 int 值。

在任何情况下,如果您的值是稀疏的,请考虑使用像map<vector<string> >.

于 2013-01-27T06:20:04.030 回答
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 你没有关键概念,实际上你正在调用 access operator[]

于 2013-01-27T06:22:25.090 回答