template <const int V, const int E>
struct MultiList {
  int e, head[V], next[E + 1], to[E + 1];
  MultiList() : e(1) { }
  void add( int v, int x ) {
    assert(e <= E);
    to[e] = x, next[e] = head[v], head[v] = e++;
  }
};

MultiList<10, 100> g; // граф из 10 вершин, не более чем 100 рёбер

g.add(2, 3); // ребро из 2 в 3
for (int e = g.head[v]; e; e = g.next[e]) { 
  // перебор рёбр из вершины v: e -> g.to[e]
}