binary&#39; ==&#39;:找不到运算符,它接受类型&#39; std :: vector <int,std :: allocator <_ty>&gt;&#39;的左手操作数。 (或者没有可接受的转换)

时间:2017-05-09 16:48:47

标签: c++ stl

#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>

using namespace std;


int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int n, m;
        cin >> n >> m;
        vector <vector<int> > A(m, vector<int>(2));
        vector<int> possible;
        vector<int> set;
        int i;
        for (i = 0;i < m;i++)
        {
            cin >> A[i][0] >> A[i][1];
            possible.push_back(A[i][0]);
            possible.push_back(A[i][1]);
        }
            sort(possible.begin(), possible.end());
            int j = 0;
            bool size = 0;
            for (i = 0;i < possible.size();i++)
            {
                set.push_back(possible[i]);
                while (possible[i] == set[j])
                {
                    i++;
                    if (i == possible.size())
                    {
                        size = 1;
                        break;
                    }
                }
                if (size)
                    break;
                i--;
                j++;
            }
            vector<int> iter;
            for (i = A.size() - 1;i >= 0;i--)
            {
                auto it1 = find(A.begin(), A.end(), A[i][0]);
                auto it2 = find(A.begin(), A.end(), A[i][1]);
                if ((it1 != A.end()) && (it2 != A.end()))
                {
                    iter.push_back(i);
                    A.erase(it1);
                    A.erase(it2);
                }
            }
            for (i = iter.size() - 1;i >= 0;i--)
                cout << iter[i] << " ";
            cout << endl;
        }
        return 0;
}

这是我为codechef上发现的问题编写的代码,无论如何继续这件事,我不断得到错误binary '==': no operator found which takes a left-hand operand of type 'std::vector<int,std::allocator<_Ty>>' (or there is no acceptable conversion)通过xutility&#34; page&#34;,简单地说,我甚至不知道为什么我得到这个错误可能有人请解释发生了什么 下面是我双击错误时重定向到的代码片段

template<class _InIt,
    class _Ty> inline
    _InIt _Find_unchecked1(_InIt _First, _InIt _Last, const _Ty& _Val, false_type)
    {   // find first matching _Val
    for (; _First != _Last; ++_First)
        if (*_First == _Val)
            break;
    return (_First);
    }

另外,任何人都可以解释一下auto关键字的作用,我对它的用法有点不同,有人可以解释一下吗

2 个答案:

答案 0 :(得分:2)

auto it1 = find(A.begin(), A.end(), A[i][0]);
auto it2 = find(A.begin(), A.end(), A[i][1]);

您正在将迭代器传递到{2}向量find并试图找到一个int。这不起作用,因为A的元素类型是std::vector<int>,而不是int

从您的代码判断它看起来像你打算做

auto it1 = find(A[i].begin(), A[i].end(), A[i][0]);
auto it2 = find(A[i].begin(), A[i].end(), A[i][1]);

在第i个索引处获取向量并在这些向量中找到int

我还想提一下,using namespace std;vector<int> set;可能会带来一些有趣的问题。 setstd的成员,因此编译器在看到set时会感到困惑,因为您可能会引用类型或变量。解决这个问题的最简单方法就是摆脱using namespace std;。有关详情,请参阅:Why is "using namespace std" considered bad practice?

答案 1 :(得分:0)

这是工作代码

    #include <bits/stdc++.h>
    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <vector>

    using namespace std;


    int main()
    {
        int t;
        cin >> t;
        while (t--)
        {
            int n, m;
            cin >> n >> m;
            vector <vector<int> > A(m, vector<int>(2));
            vector<int> possible;
            vector<int> set;
            int i;
            for (i = 0;i < m;i++)
            {
                cin >> A[i][0] >> A[i][1];
                possible.push_back(A[i][0]);
                possible.push_back(A[i][1]);
            }
                sort(possible.begin(), possible.end());
                int j = 0;
                bool size = 0;
                for (i = 0;i < possible.size();i++)
                {
                    set.push_back(possible[i]);
                    while (possible[i] == set[j])
                    {
                        i++;
                        if (i == possible.size())
                        {
                            size = 1;
                            break;
                        }
                    }
                    if (size)
                        break;
                    i--;
                    j++;
                }
                vector<int> iter;
                for (i = A.size() - 1;i >= 0;i--)
                {
                    auto it1 = find(A[i].begin(), A[i].end(), A[i][0]);
                    auto it2 = find(A[i].begin(), A[i].end(), A[i][1]);
                    if ((it1 != A[i].end()) && (it2 != A[i].end()))
                    {
                        iter.push_back(i);
                        A[i].erase(it1);
                        A[i].erase(it2);
                    }
                }
                for (i = iter.size() - 1;i >= 0;i--)
                    cout << iter[i] << " ";
                cout << endl;
            }
            return 0;
    }

你错过了A是2d向量的事实,所以在第51行及以下你应该使用A [i]访问数组。 你可以在这里阅读自动 - http://en.cppreference.com/w/cpp/language/auto

希望这有帮助!