检查给定的向量是否包含c ++中对的元素

时间:2017-04-07 11:07:46

标签: c++ vector std-pair

让我们假设有以下对

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    

有什么不对?提前谢谢

1 个答案:

答案 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.firstint

因此,您正试图在int vector中找到pair。你不能这样做。

此外,您的所有功能都缺少必需的return语句。