グラフを作成しようとしています。 2つの値のペアです(int
)。このため私はリストadj
pii (pair<int, int>)
のリストを作成しました。今、私はpush_back
に、リスト内のPIIタイプのノードをしようとすると、それはエラー: '演算子[]'に一致しません(オペランドの種類は 'std :: list <std :: pair <int, int> *'および 'std :: pair <int, int>')
error: no match for 'operator[]' (operand types are 'std::list<std::pair<int, int> >*' and 'std::pair<int, int>')|
言うここに私のコードです。 (私はまだmain()
からエッジを追加していません)。私は必要なすべてのヘッダーを含めました。私は検索しましたが、同様のエラーは見つかりませんでした。
#define pii pair<int, int>
#define lli long long int
using namespace std;
class graph
{
lli v;
list<pii> *adj;
public:
graph(lli v);
void addEdge(pii n, pii m);
void bfs(pii s);
};
graph::graph(lli v)
{
this->v = v;
adj = new list<pii >[v];
}
void graph::addEdge(pii n, pii m)
{
adj[n].push_back(m); //Error Line
}
void graph::bfs(pii s)
{
bool visited[v];
memset(visited, false, sizeof(visited));
list<pii> q;
list<pii>::iterator it;
q.push_back(s);
while(!q.empty())
{
pii temp = q.front();
q.pop_front();
for(it = adj[temp].begin() ; it != adj[temp].end() ; it++)
{
if(!visited[*it])
{
visited[*it] = true;
q.push_back(*it);
}
}
}
}
int main()
{
int n, m, i, j;
pii coordinates;
cin>>n>>m;
char input[n][m];
for(i = 0 ; i < n ; i++)
{
for(j = 0 ; j < m ; j++)
{
cin>>input[i];
make_pair(i, j);
}
}
graph(n*m);
return 0;
}
Um ...あなたは 'std :: pair'型を添字として索引付けしていますが、 'long long int'ではなく、そうですか? 'n'(' pii')の*型*を見てください。これは明らかにマクロ内に隠すために広範囲に試みました。 –
WhozCraig
難読化されています。奇妙なマクロを使わないでください。あなた自身のコードを読むことができます:P – user463035818
@WhozCraig 'n'は' pair 'だけですがpiiタイプです。あなたが何を言おうとしているか分かりません。 –
Sarthak