property_iterator.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 118 行
CPP
118 行
// (C) Copyright Fran鏾is Faure, iMAGIS-GRAVIR / UJF, 2001. // Distributed under the Boost Software License, Version 1.0.// (See accompanying file LICENSE_1_0.txt or copy at// http://www.boost.org/LICENSE_1_0.txt)// Revision History:// 03 May 2001 Jeremy Siek// Moved property iterator code to headers. // 02 May 2001 Fran鏾is Faure// Initial version.#include <boost/graph/adjacency_list_io.hpp>#include <boost/graph/property_iter_range.hpp>#include <fstream>#include <algorithm>using namespace boost;//======== vertex propertiesstruct toto_t { enum { num = 23063}; typedef vertex_property_tag kind;};typedef property< toto_t, double > Toto;struct radius_t { enum { num = 23062}; typedef vertex_property_tag kind;};typedef property< radius_t, double, Toto > Radius;struct mass_t { enum { num = 23061}; typedef vertex_property_tag kind;};typedef property< mass_t, int, Radius > Mass;//====== edge propertiesstruct stiff_t { enum { num = 23064}; typedef edge_property_tag kind;};typedef property<stiff_t, double> Stiff;//===== graph typetypedef Mass VertexProperty;typedef Stiff EdgeProperty;typedef adjacency_list<vecS, setS, bidirectionalS, VertexProperty, EdgeProperty> Graph;//===== utilitiesstruct Print{ template<class T> Print& operator() (const T& t) { std::cout << t << " "; return (*this); }};template<class T>struct Set{ T value; Set( const T& t ):value(t){} Set& operator() (T& t) { t=value; return (*this); }};//===== programint main(int argc, char* argv[]){ if (argc < 2) { std::cerr<<"args: file"<<std::endl; return EXIT_FAILURE; } std::ifstream readFile(argv[1]); Graph graph; readFile >> read( graph ); std::cout << write( graph ); std::cout << "radii:" << std::endl; graph_property_iter_range<Graph,radius_t>::type seqRadius = get_property_iter_range(graph,radius_t()); std::for_each( seqRadius.first, seqRadius.second, Print() ); std::cout << std::endl; std::cout << "stiff:" << std::endl; graph_property_iter_range<Graph,stiff_t>::type seqStiff = get_property_iter_range(graph, stiff_t()); std::for_each( seqStiff.first, seqStiff.second, Print() ); std::cout << std::endl; seqStiff = get_property_iter_range(graph, stiff_t()); std::for_each( seqStiff.first, seqStiff.second, Set<double>(2.4) ); std::cout << "new stiff:" << std::endl; seqStiff = get_property_iter_range(graph,stiff_t()); std::for_each( seqStiff.first, seqStiff.second, Print() ); std::cout << std::endl; return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?