2010-06-03 3 views
2

많은 수의 정수를 저장해야합니다. 정수의 입력 스트림에 중복이있을 수 있습니다. 그 중 하나를 구분하기 위해서는 이 필요합니다. 처음에는 stl 세트를 사용했지만 정수가 너무 많이 입력되면 OutOfMem이 발생했습니다. 은 아마도 상기 요구 사항과 함께 번호를 저장할 수있는 C++ 컨테이너 라이브러리를 찾고 있습니다. 즉, 컨테이너가 모든 번호를 유지하려고 시도해서는 안됩니다. 즉, 파일로 백업됩니다. 이 데이터를 지속적으로 저장할 필요는 없으며 그 중 유일한 값은 입니다. 당신이 RAM보다 더 필요하기 때문에C++ 용 컨테이너처럼 확장 가능한 stl 세트

+0

정수 값의 범위는 무엇입니까? – sbk

+1

나는이 질문에 너무 당혹 스럽지만 어쩌면 당신은 64 비트 용으로 앱을 재건하고 64 비트 시스템에서 실행할 수 있습니다. – OldFart

+0

문제는 메인 mem은 모든 숫자를 담을만큼 크지 않다는 것과 우리는 container와 같은 external-mem-backed 세트가 필요하다는 점입니다. – Pqr

답변

0

당신이 STXXL를 살펴 보자 memcached

+0

memcached? 어떻게 사용할 수 있는지 설명해 주시겠습니까? – Pqr

1

볼 수 있습니다; 네가 찾고있는 것일 수도있어.

편집 : 내가 직접 사용하지 않은,하지만 문서에서 - 당신은 stream::unique을 사용하여 마지막으로 정렬 된 스트림을 병합하고 다음 stream::runs_merger을 데이터 (메모리에서 아무리 맞는)의 정렬 된 실행을 만들 stream::runs_creator를 사용할 수 있습니다 순 쿠키를 필터링합니다.

+0

방금 ​​stlxxl을 보았습니다. 언뜻보기에는 stl :: set과 같은 것이없는 것 같습니다. – Pqr

+0

병합 정렬 방식을 사용해야합니다. 내 편집을 참조하십시오. – tzaman

0

DB (아마도 SQLite)를 사용 해본 적이 있습니까? 아니면 너무 느릴까요?

+0

그건 너무 느릴 것 같아요. – Pqr

0

너무 느리다는 결론을 내리기 전에 데이터베이스를 심각하게 시험해보아야합니다. 가벼운 키 - 값 저장소 중 하나만 있으면됩니다. 과거에는 Berkeley DB를 사용했지만 여기서는 list of other ones입니다.