【问题标题】:"Operator mismatch" error in c++C ++中的“运算符不匹配”错误
【发布时间】:2018-06-30 11:56:23
【问题描述】:

我正在创建图形v 的转置并将其保存在g2 中。 vg2 都是同一种类型,所以g2 会保存图的转置。

下面,v 属于vector<int>v[1000]。它由一个图的邻接表表示。

vector<int> v[10000] = ...; // input: some matrix
vector<int> g2[10000]; // output: transposed matrix

for(int u=0;u<N;u++) //N is the number of vertices
    for(vector<int>::iterator it=v[u].begin();it!=v[u].end();it++) 
      g2[v[*it]].push_back(u);

我收到此错误:

prog.cpp:74:8: error: no match for 'operator[]' (operand types are 'std::vector<int> [10001]' and 'std::vector<int>')
   g2[v[*it]].push_back(u);
    ^    

你们能帮帮我吗?

【问题讨论】:

  • 问题是g2[v[*it]]*itint 类型(好的)。 v[*it]std::vector&lt;int&gt; 类型,您正试图将其用作数组 g2 的索引,其索引只能是整数类型,而不是 int 的向量。那就是问题所在。在不知道你为什么匆匆写下这段代码的情况下,或者你想通过匆匆写下它来达到什么目的的情况下,没有人可以就你需要做什么提供建议(通过互联网读心是一项非常罕见的技能)。
  • 抱歉,我没有添加。实际上我正在创建图 v 的转置并将其保存在 g2 中。 v 和 g2 都是相同的类型,所以 g2 将保持图形的转置(我认为)。

标签: c++ c++11 graph


【解决方案1】:
vector<int> g2[10000];
for(int u=0;u<N;u++) //N is the number of vertices
{ 
      for(vector<int>::iterator it=v[u].begin();it!=v[u].end();it++) 
      {
         g2[u].push_back(*it);
      }
}

我希望这会有所帮助。

【讨论】:

  • 对不起兄弟,我没有投反对票。在这里,我想创建图 v 的转置,并将其保存在 g2 中。但我认为您的代码只会创建 v 的副本?抱歉,我之前没有提到转置!
猜你喜欢
  • 2015-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
相关资源
最近更新 更多