std :: map может быть тем, что вы ищете, это ключ -> тип карты значений. Объедините это с std :: set, который является уникальной коллекцией элементов. Таким образом, вы можете использовать карту std :: set следующим образом:
std::map<int, std::set<int> > sparseMatrix;
// Add some edges.
sparseMatrix[0].insert(1); // Add an edge from vertex 0 to 1.
sparseMatrix[4].insert(2); // Add an edge from vertex 4 to 2.
sparseMatrix[0].insert(1); // Edge already exists, no data added to the set.
Это представление позволяет вам представить ориентированный граф, он аналогичен списку ребер. Поведение набора также препятствует тому, чтобы у вас было два «одинаковых ребра» (a-> b и c-> d, где a = b и c = d), что хорошо, такое поведение вы получите, если вы использовал матрицу смежности. Вы можете перебрать все ребра так:
for(std::map<int, std::set<int> >::const_iterator i = sparseMatrix.begin();
i != sparseMatrix.end();
++i)
{
for(std::set<int>::const_iterator j = i->second.begin();
j != i->second.end();
++j)
{
std::cout << "An edge exists from " << i->first << " to " << *j << ".";
}
}
Некоторые ссылки: