문제

나는 같은 것을 원한다 std ::지도, 그러나 나는 항목이 존재하는지 아닌지를보고 싶다. 나는 실제로 키와 값이 필요하지 않다. 무엇을 사용해야합니까?

도움이 되었습니까?

해결책

필요한 것 같습니다 std :: 세트.

다른 팁

동일한 유형의 행동을 원한다면 std::map, 당신은 원합니다 std::set.

삽입/삭제 및 쿼리 작업을 믹싱하는 경우 std::set 아마도 최선의 선택 일 것입니다. 그러나 먼저 세트를 채우고 쿼리를 따라 따라갈 수 있다면 사용하는 것이 좋습니다. std::vector, 정렬 한 다음 바이너리 검색을 사용하여 벡터의 존재를 확인하십시오.

당신이 정말로 존재가 필요하지 않으면 질서조차 필요하지 않다면, 당신은 unordered_set. 좋아하는 C ++ 0X 공급 업체에서 제공되거나 boost.org.

데이터가 숫자 인 경우 공간에 최적화 된 std :: 벡터를 사용할 수 있습니다.

D:\Temp>type vectorbool.cpp
#include <iostream>
#include <vector>

using namespace std;

int main() {
        vector<bool> vb(10);
        vb[5] = true;

        for (vector<bool>::const_iterator ci = vb.begin(); ci != vb.end(); ++ci) {
                cout << *ci << endl;
        }
}

D:\Temp>cl /nologo /W4 /EHsc vectorbool.cpp
vectorbool.cpp

D:\Temp>vectorbool.exe
0
0
0
0
0
1
0
0
0
0

당신은 아마 볼 것입니다 stl::set 필요한 것을 위해. ㅏ stl::bitset 또 다른 옵션입니다.

이 중 어느 것이 더 나은지 정의 할 정보를 어떻게 사용해야하는지에 따라 다릅니다. ㅏ set 정렬 된 데이터 구조, 삽입, 찾기 및 삭제 시간은 O (log n) 시간입니다. 그러나 필요하다면 반복 당신이 "존재"로 표시 한 모든 값에 대해 set 갈 길입니다.

표시하고 조회하면됩니다 사실 그게 세트의 구성원입니다. bitset 당신에게 더 좋을 수도 있습니다. 삽입, 찾기 및 삭제는 O (1) 만 필요하지만 수집 할 수 있습니다. int 가치. 모든 표시된 값을 반복하면 설정된 멤버를 찾기 위해 전체 세트를 거쳐야합니다. true. 당신은 a와 함께 사용할 수 있습니다 STL ::지도 값에서 숫자 값에 매핑하려면 bitset 필요합니다.

세트의 값으로 수행 해야하는 작업을 살펴보고 적절한 데이터 구조를 선택할 수 있어야합니다.

원하는 목적으로 std :: 맵을 계속 사용할 수 있습니다.

맵에 특정 항목 (키 유형)이 존재하는지 확인하려면 다음 코드를 사용할 수 있습니다.

if (mapObj.count(item) != 0)
{
   // item exists
}

앞서 대답했듯이 std :: set도 작업을 수행합니다. 흥미롭게도 세트와지도는 내부적으로 나무로 표시됩니다.

키가 값이라면 세트가 아닌 "블룸 필터"를 고려할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top