制作对的邻接表

时间:2019-01-08 13:31:41

标签: c++ data-structures

我从以下格式的文件中获取输入:

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 :(得分:0)

这取决于要求。正如Sam所说的那样,存在默认的比较重载,它首先比较first字段。如果相同,那么它将比较second字段。

如果这就是您想要的,那么直接使用它即可。

否则,重载比较运算符。我认为在您的情况下,您不需要它。

对于您而言,您应该做的是维持map

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

并直接使用pair作为地图的键。