【发布时间】:2018-09-21 22:09:32
【问题描述】:
我有一个名为 Edge 的结构列表向量
所以,
vector<list<Edge>> adjA;
我的结构看起来像:
struct Edge {
int weight;
...
}
假设我的 adjA 已经被边填充了,我将如何访问这些边的变量?
vector<int>weights;
for(uint i = 0; i < adjA.size(); i++) //iterating through vector
{ for(uint j = 0; j < adjA[i].size(); j++) //iterating through list
{
weights.push_back(adjA[i][j].weight); //compiler error
}
}
错误:
no match for ‘operator[]’ (operand types are ‘__gnu_cxx::__alloc_traits<std::allocator<std::__cxx11::list<Edge> > >::value_type {aka std::__cxx11::list<Edge>}’ and ‘uint {aka unsigned int}’)
weights.push_back(adjA[i][j].weight);
提前致谢
【问题讨论】:
-
std::list没有operator [] ()。 -
如果你需要直接访问,也许你需要一个vector的vector
-
警惕 std::list。它实际上从来都不是向量的更好选择,即使向量导致 O(n) 惩罚的操作并不少见。 youtube.com/watch?v=YQs6IC-vgmo 链接的视频有 C++ 的创始人支持这个理由。