In the code snippet below (which is inside a vis object) if the line //g[*ei].edge_Weight = "Heavy"; is uncommented, compiling gives :error const discarded ( or something to that effect) because of the const in (const Graph & g) . But then how come put(m_eWeight_map, *ei, "Heavy"); compiles successfully and successfully changes the value? Does put(m_eWeight_map, *ei, "Heavy"); override the const in void Change_data(const Graph & g) ? template < typename Graph > void Change_data(const Graph & g) //void Change_data(Graph & g) { typename graph_traits< Graph >::edge_iterator ei, ei_end; for(tie(ei, ei_end) = edges(g); ei != ei_end; ++ei) { put(m_eWeight_map, *ei, "Heavy"); //g[*ei].edge_Weight = "Heavy"; } } Thanks - Caligula