나는 Bulls & Cows라는 게임 코드를 작성하고 있습니다. 나는 이미 하나의 벡터 (같은 인덱스에있는 경우)의 값이 동일한지를 확인했다. 그러나 두 벡터를 통해 이동하고 하나의 값이 다른 벡터의 다른 인덱스 값과 일치하는지 확인하는 for 루프를 작성하는 방법을 모르겠습니다. 나는 어떤 도움을 주셔서 감사합니다. 고맙습니다!한 벡터의 값이 다른 벡터의 값과 일치하는지보고 싶습니다.
답변
은 단순한 반복 수행 두 벡터 길이 N의 경우
vector<int> v1, v2;
//Initialize v1 and v2...
for (auto& i: v1) //Loop through each element of v1
for (auto& j: v2) //Same for v2
if (i == j)
std::cout << "Ok! They match!" << std::endl;
이것은 C++ 11에 대해서만 언급해야합니다. 그렇지 않으면 auto가 실제 유형이어야합니다. – Bettorun
무력 접근법
for(auto& x1 : vec1)
for(auto& x2 : vec2)
if(x1 == x2)
return true;
return false;
이다 이것은 N2 비교를 수행 발견되지 않은 경우, 평균적으로
O (n)의 2 차 시간입니다. 이것은보기에 좋지 않습니다.
더 나은 성능을 위해 당신은 단지 가을 설정 한 벡터의 모든 값을 넣을 수 있습니다. 그런 다음 다른 벡터의 각 값을 집합과 비교하여 확인할 수 있습니다. std::set
각 값의 체크는 로그 ( N) 등 N 값를 검사하면 O (N 로그 N) 시간을 제공한다. std::unordered_set
의 경우 검사는 본질적으로 일정 시간이므로 O (n)로 전체 작업을 단축합니다.
그러나 최소 g ++ 버전 (MinGW 5.1)에서 해당 표준 라이브러리 구현이 해시 함수 enum
의 해시를 지원하지 않아서 해시 함수를 제공해야한다는 점에서 std::unordered_set
에 문제가 있습니다. 코드를 이식성있게 만드는 일반적인 해싱 지원.
그래서,
using Item = decltype(v1)::value_type;
std::set<Item> v1_values{ v1.begin(), v1.end() };
for(auto& x2 : v2)
if(v1_values.count(x2) > 0)
return true;
return false;
면책 조항 : 코드도 컴파일러에 의해 훑어보고하지, 나는이 count
내가 일반적으로 단지 표준 라이브러리 물건을 포장하기 때문에 확인하는 가장 우아한 방법인지에 대해 확신 해요.
가장 좋은 성능 현명한 증분 방식, 예를 사용하는 것
v1
또는 v2
에 값을 추가 할 때마다 해당 세트를 업데이트하십시오. 이는 코드의 복잡성을 증가시키고 이러한 벡터를 사용하는 것과 독립적입니다. 나는. 이는 더 복잡한 솔루션입니다. 일반적으로 추가 된 복잡성으로 성능에 대한 비용을 지불합니다.
이것은 std::find_first_of의 정의입니다.
- 1. 벡터의 값을 입력 값과 비교
- 2. 벡터의 값이 다른 벡터에 있는지 확인하십시오.
- 3. 벡터의 C++ 벡터 벡터의 크기
- 4. 벡터의 고유 한 값을 R
- 5. 한 벡터의 요소를 다른 벡터로 복사
- 6. 벡터의 모든 항목에 다른 벡터의 단일 항목을 곱하십시오.
- 7. 다른 스레드가 벡터의 끝에 요소를 푸시하면 벡터의 반복자가 무효화됩니까?
- 8. 두 벡터의 일치 값
- 9. 다른 벡터의 요소에서 벡터 만들기
- 10. std :: 벡터의 위치에서 벡터의 위치로 복사
- 11. 벡터의 자바 HashMap
- 12. 값이 될 때까지 벡터의 연속 요소를 추가하십시오.
- 13. 코사인 길이가 다른 벡터의 유사성?
- 14. 벡터의 정의는
- 15. 벡터의 포인터
- 16. C++에서 한 벡터의 객체에 대한 참조를 다른 벡터의 객체에 저장하는 방법은 무엇입니까?
- 17. 다른 객체 벡터 내부에 배치하면 난수 벡터의 값이 0으로 설정됩니다.
- 18. 벡터의 차원을 줄이는 방법
- 19. 벡터의 총 값 수를 계산합니다.
- 20. 벡터의 유사성 척도
- 21. 벡터의 행에 값 할당
- 22. 벡터의 값을 사용하여 R
- 23. 벡터의 모든 조합
- 24. 하나의 벡터가 다른 벡터의 일부인지 빠르게 검사하십시오.
- 25. 이사벨 : 벡터의 최대 값
- 26. 벡터의 최대 값을 제거하십시오.
- 27. 맞춤 벡터의 명확한 기능
- 28. 다른 정렬 된 벡터에도있는 정렬 된 벡터의 값 찾기
- 29. C++ - 벡터의 엔티티 관리
- 30. 벡터의 반환 유형
* 소스 코드 * 시도를 제공해주십시오. –
[std :: find()'] (http://en.cppreference.com/w/cpp/algorithm/find)를 사용하면'std :: vector' (또는 대부분의 다른 컨테이너). –