#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关键字的作用,我对它的用法有点不同,有人可以解释一下吗
答案 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;
可能会带来一些有趣的问题。 set
是std
的成员,因此编译器在看到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
希望这有帮助!