让我们假设有以下对
0 -1
0 -2
0 -3
1- 2
2 -3
3- 4
2 -4
4- 5
5 -6
我想将这些对插入向量中,因此我应该只将每个元素放一次,例如 从空载体开始:
插入0-1 现在我们检查0-2,存在0,但不是2,所以插入0-2,我们有
0-1
0-2
现在0-3,3不在列表中,所以我们可以插入
0-1
0-2
0-3
现在让我们考虑1-2,当然我们都有两个,所以跳过,现在让我们考虑2-3,再次我们可以跳过,3-4,3存在但不是4,所以我们可以插入 3-4,插入后4,4也存在,所以拒绝2-4然后是4-5和5-6,所以我们有以下列表
0-1
0-2
0-3
3-4
4-5
5-6
我有以下代码
#include<iostream>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
struct edge
{
int a, c;
float weight;//edge a-c has weight
bool operator() (edge x, edge y)
{
x.weight < y.weight;
}
};
int noncyclical_sum(vector<edge>s)
{
int total = 0;
std::vector<std::pair<int, int>> b;
auto m = make_pair(s[0].a, s[0].c);
b.push_back(m);
total = total + s[0].weight;
vector<edge>::iterator it;
for (int i = 1; i < s.size(); i++)
{
auto m = make_pair(s[i].a, s[i].c);
//if (find(b.begin(), b.end(), s[i].a) != b.end() && find(b.begin(), b.end(), s[i].c) != b.end())
if (find(b.begin(), b.end(), m.first) != b.end() && find(b.begin(), b.end(), m.second) != b.end())
{
continue; //both element is in the vector
}
else
{
b.push_back(m);
total = total + s[i].weight;
}
std::vector<std::pair<int, int>>::iterator ii;
for (ii = b.begin(); ii != b.end(); ii++)
cout << ii->first << " " << ii->second;
}
}
int main()
{
return 0;
}
第一次,我已经推了第一对,从第二对开始,我正在检查同时两个元素是否在向量中,我拒绝对并继续,否则我推新对并继续,但我有以下错误
Severity Code Description Project File Line Suppression State
Error C2678 binary '==': no operator found which takes a left-hand operand of type 'std::pair<int,int>' (or there is no acceptable conversion) kurskal_algorithm c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.10.25017\include\xutility 3161
有什么不对?提前谢谢
答案 0 :(得分:3)
问题出在这一行:
if (find(b.begin(), b.end(), m.first) != b.end() && find(b.begin(), b.end(), m.second) != b.end())
让我们检查std::find
来电的参数:b.begin()
和b.end()
是std::vector<std::pair<int, int>>::iterator
,而m.first
是int
。
因此,您正试图在int
vector
中找到pair
。你不能这样做。
此外,您的所有功能都缺少必需的return
语句。