shn*_*shn 1 c++ indexing boost graph boost-graph
我正在尝试使用associative_property_map来包含顶点的索引,但是我使用以下简单代码得到以下错误,问题是什么?
#include <boost/graph/iteration_macros.hpp>
#include <boost/graph/adjacency_list.hpp>
using namespace std;
using namespace boost;
struct NodeData
{
int label;
};
struct EdgeData
{
int age;
};
typedef map<vecS, size_t> IndexMap;
IndexMap mapIndex;
associative_property_map<IndexMap> propmapIndex(mapIndex);
typedef adjacency_list<setS, setS, undirectedS, NodeData, EdgeData> Graph;
typedef Graph::vertex_descriptor NodeID;
typedef Graph::edge_descriptor EdgeID;
int main()
{
Graph g;
NodeID n0 = add_vertex(g); g[n0].label = -1;
NodeID n1 = add_vertex(g); g[n1].label = -1;
EdgeID edge; bool ok;
tie(edge, ok) = boost::add_edge(n0, n1, g);
if (ok) g[edge].age = 10;
int i=0;
BGL_FORALL_VERTICES(v, g, Graph)
{
put(propmapIndex, v, i++);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误:
Run Code Online (Sandbox Code Playgroud)c:\program files\codeblocks\mingw\bin..\lib\gcc\mingw32\4.4.1........\include\boost\property_map\property_map.hpp||Infunction'void boost :: put(const boost :: put_get_helper&,K,const V&)[with PropertyMap = boost :: associative_property_map,std :: allocator>
,Reference = unsigned int&,K = void*,V = int]':| C:\ Users\memo\Desktop\Debuged\boostGraph\main.cpp | 39 |从这里实例化| c:\ program files\codeblocks\mingw\bin ..\lib\gcc\mingw32\4.4.1 ........\include\boost\property_map\property_map.hpp | 361 | error:no match for' operator []'in'(const boost :: associative_property_map,std :: allocator >>>&)((const boost :: associative_property_map,std :: allocator >>>*)(&pa))[k]'| c:\ program files\codeblocks\mingw\bin ..\lib\gcc\mingw32\4.4.1 ........\include\boost\property_map\property_map.hpp | 498 |注意:候选人是:typename UniquePairAssociativeContainer :: value_type :: second_type&boost :: associative_property_map :: operator [](const typename UniquePairAssociativeContainer :: key_type&)const [with UniquePairAssociativeContainer = std :: map,std :: allocator >>] | || ===构建完成:1个错误,0个警告=== |
谢谢
顶点描述符必须指定给IndexMap,所以它是map<NodeID, size_t>和不是map<vecS, size_t>:
<...>
typedef Graph::vertex_descriptor NodeID;
typedef map<NodeID, size_t> IndexMap;
IndexMap mapIndex;
associative_property_map<IndexMap> propmapIndex(mapIndex);
<...>
// indexing all vertices
int i=0;
BGL_FORALL_VERTICES(v, g, Graph)
{
put(propmapIndex, v, i++);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
829 次 |
| 最近记录: |