2015-01-29 2 views
0

일부 많은 문자열 (즉, 100 만개)에 대해 double 유형 점수를 계산하고 있다고 가정하고 계산 한 것을 다시 사용하기 위해 일종의 캐싱 효과를 갖고 싶습니다. 지금까지는 필요할 때마다. 자, 현명한 방법은 메모리 사용량을 줄이기 위해 빈번한 문자열과 점수를 맵에 저장하는 것입니다. 이 표준 솔루션이 있습니까?C++에서지도에 빈번한 키 저장하기

+0

에서 영감을

대답 표준 : map''''한 번 봐, 당신이 키와''double'' 등으로''표준 : string''를 사용할 수있는 연관 배열이다 값. – NikolayKondratyev

+2

캐시가 바운드없이 커지거나 LRU 솔루션을 더 많이 찾고 있습니까 (즉, 캐시가 지정된 최대 크기에 도달 한 후 최근에 사용되지 않은 캐시 항목이 그것보다 큰 성장에서) –

+0

@ JeremyFriesner 방금 언급 한 것, LRU 솔루션, 내가 뭘 찾고있는 것처럼 들리 네. – user3639557

답변

0

블룸지도 또는 HashMaps을

당신은 문자열의 수백만 100의 그들 모두는 디스크에 수도가 아니라는 것을 언급 나는이 가정입니다 함께 필터. 다음과 같이

은 무엇 내가 제안하는 것은 두 개의 레이어 계층 구조입니다 :

은 다음과 같은 형식이다 해시 맵을 작성

std::map<std::string, double> map; 

이 지난 500 개 참조 항목을 포함 할 수있다. 지도를 사용하는 경우 TTL을 기반으로 퇴거 정책을 사용할 수 있습니다. 당신이 가장 최근에 사용 된 기반으로 퇴거 정책을 원하는 경우

, 당신은 약간 복잡해질 것이다 약간에게 자료 구조를

std::map<std::string, cached_data> map; 

struct cached_data 
{ 
    double value; 
    int times_accessed;   //Number of times it has been accessed. 
} 

삽입을 조정할 수있을 것이다.

이제 캐시 액세스가 실패 할 때 수행해야 할 작업이 있습니다. 실제로 데이터가 없으면 불필요하게 디스크를 읽지 않으려합니다. 그 때문에 bloomfilter를 사용할 수 있습니다. 블룸 필터는 데이터가있을 확률을 알려 주어 디스크 읽기를 방지합니다.

키 -> 디스크 주소 매핑으로 구성된 인덱스를 사용하여 정렬 된 방식으로 많은 양의 문자열을 디스크에 제안 해 보겠습니다. 크게 카산드라