UPDATE:
The following code gives me an error
Graph.cpp: In function ‘std::ostream&
operator<<(std::ostream&, const
Graph&)’: Graph.cpp:43: error: passing
‘const std::map >,
std::less,
std::allocator > > > >’ as
‘this’ argument of ‘_Tp&
std::map<_Key, _Tp, _Compare,
_Alloc>::operator[](const _Key&) [with _Key = long int, _Tp = std::vector >, _Compare =
std::less, _Alloc =
std::allocator > > >]’
discards qualifiers Graph.cpp:44:
error: passing ‘const std::map >,
std::less,
std::allocator > > > >’ as
‘this’ argument of ‘_Tp&
std::map<_Key, _Tp, _Compare,
_Alloc>::operator[](const _Key&) [with _Key = long int, _Tp = std::vector >, _Compare =
std::less, _Alloc =
std::allocator > > >]’
discards qualifiers make[2]: *
[build/Debug/GNU-MacOSX/Graph.o] Error
1
class Graph {
public:
Graph();
Graph(const Graph& orig);
virtual ~Graph();
void clear();
void rgg(lint, double);
bool is_directed() { return directed; }
friend ostream& operator<< (ostream&, const Graph&);
private:
map< lint, vector<lint> > adjList;
vector< pair<double, double> > xy;
double radius;
MTRand Rand;
bool directed;
};
void Graph::rgg(lint n, double r) {
radius = r; directed = false;
clear();
for(lint i = 0; i < n; i++)
xy.push_back(pair<double, double>(Rand.rand(), Rand.rand()));
}
ostream& operator<< (ostream& os, const Graph& inGraph) {
for(lint i = 0; i < inGraph.nodes; i++) {
os << i << " ";
if( inGraph.adjList.find(i) != inGraph.adjList.end() ) {
for(lint idx = 0; idx < (inGraph.adjList[i]).size(); idx++ )
os << inGraph.adjList[i].at(idx) << " ";
}
os << endl;
}
}
Thank you in advance,
The cause of your problems is that map’s
operator[]is a mutable operation (if the key doesn’t exist, it will be added to the map).You will have to use the iterator returned from
find():