我从以下格式的文件中获取输入:
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;
如何比较配对?老实说,我不知道如何实现这一目标。
答案 0 :(得分:0)
这取决于要求。正如Sam所说的那样,存在默认的比较重载,它首先比较first
字段。如果相同,那么它将比较second
字段。
如果这就是您想要的,那么直接使用它即可。
否则,重载比较运算符。我认为在您的情况下,您不需要它。
对于您而言,您应该做的是维持map
。
map<pair<int, int>, vector< pair<int, int> > > asd;
并直接使用pair
作为地图的键。