Составление списка пар смежности - PullRequest
0 голосов
/ 08 января 2019

Я принимаю данные из файла в следующей форме:

3

0 1

0 2

1 0

1 2

2 0

2 1

Здесь 3 - уникальное количество чисел в списке, т.е. 0,1,2.

Я успешно составил список смежности из списка. O / P:

0 -> 1 2

1 -> 0 2

2 -> 0 1

Используя следующий код

if (input.is_open())
{
    cout << "File is Open. \n";
    input >> totalnode;

    pair<pair<int,int>, pair<int,int>> a;
    vector<list<int>>adjlist(totalnode);
    while (input >> node1 >> node2)
    {
        adjlist[node1].push_back(node2);
    }
    vector<list<int>>::iterator i;
    int c = 0;
    for ( i = adjlist.begin(); i != adjlist.end(); ++i)
    {
        cout << c << " -> ";
        list<int> li = *i;
        list<int>::iterator iter; 
        for ( iter = li.begin(); iter != li.end(); ++iter)
        {
            cout << *iter << " ";
        }
        cout << "\n";
        c++;
    }

Теперь я хочу составить список смежных пар.

Пример:

0,1 -> (0,2) (1,0) (1,2) (2,0) (2,1)

0,2 -> (0,1) (1,0) (1,2) (2,0) (2,1)

1,0 -> (0,1) (0,2) (1,2) (2,0) (2,1)

Я думаю, я должен использовать это,

vector<pair<int, int>> asd;

или

vector<list<pair<int,int>>> asd;

Как мне сравнить пары? Честно говоря, я понятия не имею, как этого добиться.

1 Ответ

0 голосов
/ 08 января 2019

Это зависит от требования. Как правильно сказал Сэм , существует перегрузка сравнения по умолчанию, которая сначала сравнивает поле first. Если это то же самое, то сравнивается поле second.

Если это то, что вы хотите, просто используйте это напрямую.

В противном случае оператор сравнения перегрузки. Я думаю, что в вашем случае вам это не нужно.

В вашем случае вам следует поддерживать map.

map<pair<int, int>, vector< pair<int, int> > > asd;

и непосредственно используйте pair в качестве ключа для карты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...