2014-12-05 1 views
1

지도의지도에 맞춤 할당자를 사용할 수있는 방법이 있습니까?지도 및 맞춤 할당 자의지도

typedef std::map<int,int> Inner; 
typedef std::map<int, Inner> Outer; 

내가 모두 사용자 정의 할당을 가질 수

즉이의 내가 있다고 가정 해 봅시다?

내부 맵의 생성자에서 내부 맵의 할당자를 정의 할 수 없으므로 어떻게 할 수 있습니까? 외부에 대한

즉 내가 할 것이다 : 내부를 들어

Allocator myAllocator; 
Outer outer(std::less<int>(), myAllocatorObject); 

을 ??

+0

외부'map'에 대한 할당자를 작성할 수 없습니다. 여기서'construct'는 할당자를 내부 'map's에 지정합니다. (개인적으로 시도한 적은 없지만 유망한 전망 임). –

+0

잘 모름. 예? –

+0

이 데모는 설명하는 것과 매우 유사합니다 (따라서 실제로 boost를 사용하지 않더라도 원리를 보여줍니다) : http://www.boost.org/doc/libs/1_57_0/doc/ html/interprocess/allocators_containers.html # interprocess.allocators_containers.containers_explained.containers_of_containers – jez

답변

2

그것은 다음과 같습니다 : 나는 여기에 몇 가지 예제 코드를 시도했습니다

typedef std::map<int, int, std::less<int>, SimpleAllocator<std::pair<const int, int>>> Inner; 
typedef std::map<int, Inner, std::less<int>, SimpleAllocator<std::pair<const int, Inner>>> Outer; 
Inner inner; 
Outer outer; 

그것은 작동합니다

http://ideone.com/CuoaiQ


조나단 Wakely에 의해 아주 좋은 리메이크 버전 :

http://ideone.com/wBtaks

+1

별칭 템플릿을 사용하면 선언을 훨씬 간단하게 만들 수 있습니다. http://ideone.com/wBtaks (또한 할당 자 생성자는 '명시 적'이 아니어야하며 클래스 본문에 정의 된 멤버에 '인라인'을 넣을 필요가 없습니다. 그 방법을 너무 많은 헤더를 포함하여 프로그램을합니다. 그것은 또한 할당자를 훨씬 간단하게 만들 수 있어야하지만 ideone.com GCC 4.8에 갇혀 그래서 거기에서 작동하지 않습니다) –

+0

아, 네 말이 맞아, 내가 복사 - 붙여 넣기 일부 내 샘플 코드 프로젝트의 코드가 더러워 보입니다. 도와 줘서 고맙다! –

+0

고마워요. 하지만 SimpleAllocator를 직접 초기화하려면 어떻게해야합니까? –