2009-12-14 5 views
3

요소가 특정 벡터 위치에 있는지, 예를 들어 i와 같은 v [i]에 액세스하기 전에 요소가 있는지 확인하고 싶습니다. 내가 어떻게 할 수 있는지 알려 주실 수 있습니까?특정 요소가 존재하는지 여부를 C++ STL 벡터에 확인

감사합니다.

+1

매우 혼란 스럽습니다. 요소가 있는지 알아 보려면 벡터에 액세스해야합니다. 그렇다면 벡터에 액세스하지 않고 위치 i에 요소가 있는지 어떻게 판단 할 수 있습니까? 다른 벡터를 사용합니까? –

+0

벡터에 접근하는 것은 분명히 괜찮지 만, 체크되지 않은 인자 ("v [i]"와 같은)를 가진 연산자 []를 호출하는 것은 아닙니다. – MSalters

답변

9
if (0 <= i && i < v.size()) { 
    // OK 
    std::cout << v[i]; // Example 
} else { 
    // Wrong 
} 
+0

벡터의 크기가 어떻게 벡터의 요소가 있는지 알아내는 데 사용할 수있는 방법을 이해하지 못합니까? 500 요소의 벡터가 주어지면,'size' 메쏘드는 어떻게 위치 10의 원소가 존재 하는지를 결정하는데 도움이 될까요? –

+0

질문은 "i가 색인 한 위치에 요소 (또는 값)가 있는지 찾는 방법"이라고 생각합니다. –

+0

@Thomas, size()는 벡터에 실제로 들어있는 요소의 수를 반환합니다. 그래서 v [n] 여기서 0 <= n

2

v.size()을 사용하십시오.

+1

나는 그 방법을 안다. 그러나 나는 당신의 대답이 질문자를 돕지 않을 것이라고 생각한다. 어떻게 사용합니까? –

1

요소가 벡터에 있는지 알아 보려면 가장 빠른 방법은 배열을 정렬 한 다음 이진 검색과 같은 검색 방법을 사용하는 것입니다.

이 작업을 여러 번 수행하면 데이터 구조를 변경하면 성능이 향상 될 수 있습니다. std :: map은 이것에 좋고, 컴파일러가 가지고 있다면 해시 테이블이나 맵을 사용하십시오.

그렇지 않으면 벡터에 액세스하지 않고 벡터에 값이 있는지를 확인하는 유일한 방법은 두 번째 데이터 구조를 사용하여 값과 위치를 기억하는 것입니다.

+2

이것은 더 빨라질 수도 아닐 수도 있습니다. 선형 검색은 검색이 정렬마다 한 번만 수행되는 경우 정렬보다 훨씬 빠릅니다. –

4

요소가 모든 위치에 존재 함을 보장합니다. ii >= 0i < v.size()은 벡터가 인접한 요소 시퀀스이며 "구멍"이 가능하지 않습니다.

0

난 당신이 특정 차원에 미리 할당 std::vector이 이해의이 n을 가정 해 봅시다, 당신은 인덱스 i에있는 요소 (i < n)을 초기화하거나 할당되어 있는지 확인합니다.

체감 @Thomas 매튜스는 두 번째 데이터 구조, 간단한 bool[n], 당신의 vector에서 인덱스 k에있는 요소가 존재하고, 그렇지 않으면 false 경우 인덱스 k에있는, 당신은 true 저장을 사용할 수있다.

 0 1 2 3 4 5 
v = [ * * * * ] 

      0  1  2  3  4  5 
exists = [ true, false, true, false, true, true ] 
관련 문제