我正在尝试创建一个图表,其中每个节点都是一对两个int
值。为此,我创建了一个类型为pii adj
的列表(pair<int, int>)
。现在,当我尝试push_back
列表中的pii类型节点时,它会显示
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;
}
答案 0 :(得分:2)
from("file:src/data/jersey?delay=5000&noop=true")
.process(new Processor() {
public void process(Exchange exchange) throws Exception {
MultipartEntityBuilder multipartEntityBuilder =
MultipartEntityBuilder.create();
multipartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntityBuilder.addPart("username", username);
multipartEntityBuilder.addPart("password", password);
String filename = (String)
exchange.getIn().getHeader(Exchange.FILE_NAME);
File file = exchange.getIn().getBody(File.class);
multipartEntityBuilder.addPart("upload",
new FileBody(file, MULTIPART_FORM_DATA, filename));
exchange.getIn().setBody(multipartEntityBuilder.build());
}
})
.to("http4://localhost:8080/restwb/upload");
的类型为adj
,它是一个指针。指针实现以下std::list<std::pair<int, int>>*
operator[]
您尝试拨打以下电话:
T & operator[](T *, std::ptrdiff_t);
您需要使用T& operator(T*, std::pair<int, int>);
类型调用operator[]
,这是一个有符号整数。
std::ptrdiff_t
答案 1 :(得分:1)
正如其他人所说的那样,对你的问题的直接回答是你试图用[{1}}(你有pii
为#defined
)对指针进行索引,并且因为pair<int,int>
没有自动转换为整数,它不能用作索引。
从更广泛的角度来看,由于你的缩写变量和方法名称,很难看出你想要做什么。您的意图是pii
是一系列列表吗?如果是这样,您只需将第一个参数更改为add adj
,以便它可以用作此数组的索引。但是通过快速查看方法int
,看起来bfs
可能只是一个列表,在这种情况下,您可以从其声明中删除星号并在图构造函数中删除它的赋值,并完全消除索引。或者,如果您要执行的操作是将一个adj
映射到另一个pii
,则需要使用pii
而不是std::map
。