如何使用两个键作为整数创建2D矢量

时间:2013-01-27 06:12:43

标签: c++ vector std

我有一个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结束。

2 个答案:

答案 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[]