0

So, I made this adjacency list using vector, list and pair and now I want to print it on the screen. I've seen some codes printing vector< pair<..> >, but I don't know how to do it with a list. I've put a iterator at the end, but I don't know what to do from there. Here's the code:

#include <iostream>
#include <vector>
#include <list>
#include <utility>
#define MAX 18

using namespace std;
int c=1;

int main() {
vector <list<pair <int, int> > > lista(MAX);

lista[1].push_back(make_pair(2,10));
lista[1].push_back(make_pair(12,5));

lista[2].push_back(make_pair(1,10));
lista[2].push_back(make_pair(3,1));
lista[2].push_back(make_pair(11,3));

lista[3].push_back(make_pair(2,1));
lista[3].push_back(make_pair(4,6));

lista[4].push_back(make_pair(3,6));
lista[4].push_back(make_pair(5,3));

lista[5].push_back(make_pair(4,3));
lista[5].push_back(make_pair(6,8));

lista[6].push_back(make_pair(5,8));
lista[6].push_back(make_pair(7,7));
lista[6].push_back(make_pair(8,9));

lista[7].push_back(make_pair(6,7));

lista[8].push_back(make_pair(9,4));

lista[9].push_back(make_pair(8,4));
lista[9].push_back(make_pair(10,1));

lista[11].push_back(make_pair(13,0));

lista[12].push_back(make_pair(1,5));
lista[12].push_back(make_pair(13,3));

lista[13].push_back(make_pair(11,0));
lista[13].push_back(make_pair(12,3));
lista[13].push_back(make_pair(15,4));

lista[14].push_back(make_pair(15,2));

lista[15].push_back(make_pair(13,4));
lista[15].push_back(make_pair(17,3));

lista[16].push_back(make_pair(15,1));

lista[17].push_back(make_pair(15,3));

vector <list<pair <int, int> > >::iterator i;

///Time to print it!

return 0;
}

This is the graph, if you're wondering: http://prntscr.com/8qur69.

  • This is a case of reading the documentation (or RTD as some abbreviate it). Look through the docs and find the functions for accessing the elements of each of the data structures. Then, put them in order: outermost structure first (vector), innermost last (pair). [Vector](http://www.cplusplus.com/reference/vector/vector/), [List](http://www.cplusplus.com/reference/list/list/), [Pair](http://www.cplusplus.com/reference/utility/pair/). – CodeMouse92 Oct 13 '15 at 16:29
  • Well, thanks for the advice. I was on the right track, I just messed up referencing some variables. – Kaleb Carvalho Oct 13 '15 at 18:06

1 Answers1

0

I just hope this is the format you would want.

Some code to write it

template<typename cType, typename func>
void for_all(const cType& v, func f) {
    std::for_each(v.begin(), v.end(), f);
}

template<typename dType>
void print_it(const dType& pod, const string& seperator) {
    cout << pod << seperator;
}

template<typename dType>
void print_it(const std::pair<dType, dType>& p, const string& seperator) {
    cout << "(";
    print_it(p.first, string(", "));
    print_it(p.second, string(""));
    cout << ")" << seperator;
}

template<typename dType>
void print_it(const std::list<dType>& v, const string& seperator) {
    const string sep = "->";
    cout << sep;
    for_all(v, [&sep](const dType& it) { print_it(it, sep); });
    std::cout << "nullptr" << seperator;
}

template<typename dType>
void print_it(const vector<dType>& v, const string& seperator) {
    const string sep = "\n";
    for_all(v, [&sep](const dType& it) { print_it(it, sep); });
    cout << seperator;
}

template<typename dType>
void print_it(const dType& p) {
    print_it(p, "done\n");
}

and in main add

///Time to print it!
print_it(lista);

output::

->nullptr
->(2, 10)->(12, 5)->nullptr
->(1, 10)->(3, 1)->(11, 3)->nullptr
->(2, 1)->(4, 6)->nullptr
->(3, 6)->(5, 3)->nullptr
->(4, 3)->(6, 8)->nullptr
->(5, 8)->(7, 7)->(8, 9)->nullptr
->(6, 7)->nullptr
->(9, 4)->nullptr
->(8, 4)->(10, 1)->nullptr
->nullptr
->(13, 0)->nullptr
->(1, 5)->(13, 3)->nullptr
->(11, 0)->(12, 3)->(15, 4)->nullptr
->(15, 2)->nullptr
->(13, 4)->(17, 3)->nullptr
->(15, 1)->nullptr
->(15, 3)->nullptr
done
Surt
  • 15,501
  • 3
  • 23
  • 39