2017-05-09 1 views
-2
#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에서 발견 한 문제에 대해 썼습니다. 어쨌든 heres 문제를 계속합니다. 오류가 계속 발생합니다. 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 "페이지"를 통과했습니다. 아주 간단하게 말하면, 왜이 오류가 발생하는지 알 수 없습니다. 내가 오류도이진 '=='없음 연산자 타입의 왼쪽 피연산자 취하는 발견 '표준 : 벡터 <int를 표준 : 할당이 <_Ty>>'(또는가 허용 가능한 변환)

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); 
    } 

을 더블 클릭 할 때 리디렉션있어 을 heres 코드는, 사람이 무엇을 자동 키워드 미상을 설명 할 수 들, 나는 사람뿐만 아니라

다음
+3

한 번에 한 가지 질문을하고 [mcve] –

답변

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

희망이 있습니다.

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

에서

2

당신은 find에 2 차원 벡터에 반복자를 전달하고 단일 int을 찾기 위해 노력하고 있습니다. A의 요소 유형이 int이 아닌 std::vector<int> 일 때 작동하지 않습니다. 당신은 당신이 인덱스 i 번째 상기 벡터를 얻고, 그 벡터의 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]); 

을 의미 것처럼 보이는 코드에서 판단

.


또한 using namespace std;vector<int> set; 좀 재미 문제가 발생할 수 있음을 언급하고 싶습니다. setstd의 구성원이므로 형식 또는 변수를 참조 할 수 있으므로 컴파일러가 set을 볼 때 혼동을 일으킬 수 있습니다. 가장 간단한 수정 방법은 using namespace std;을 제거하는 것입니다. 자세한 내용은 Why is "using namespace std" considered bad practice?

관련 문제