관심 클래스가 있습니다 (X라고 함).
나는 std :: list를 가지고있다. < X * > (그것을 L이라 부른다).
함수가 있습니다 (F라고 함).std :: list 및 std :: map에 대한 일반적인 알고리즘?
F (L)는 목록의 각 X의 내부 상태를 검사하는 알고리즘에 따라 L (하위 목록 : <X * >)의 하위 집합을 반환합니다.
나는, X * > (그것을 M 전화)지도를 :: 내 응용 프로그램에 < 지능 성병을 추가 해요, 난 F (M)는 같은 방식으로 작동하도록 정의 할 필요가 같은 F (L) - 그 다시 말해, F (M)는지도에서 각 X의 내부 상태를 조사하여 결정된 표준 : : < X * >을 반환해야합니다.
자체 기술 된 게으른 프로그래머이므로, 알고리즘이 [논리적으로] 같고 각 데이터 형식 (std :: list 및 std :: map)이 반복 가능한 템플릿이라는 것을 알았습니다. 같은 알고리즘을 두 번 이상 유지하고 싶지는 않지만 앞으로 나아갈 방법이 확실하지 않습니다.
하나의 접근법은 F (M) (즉, 키 - 값 맵의 'values')에서 X *를 가져 와서 std :: list < X * >에 던져 넣는 것입니다. F (std :: list < X * >)에 처리를 보냅니다. return std :: list를 전달합니다. < X * >; 다시 통해. 어떻게 이것이 유일한 길인지 나는 알 수 없다.
내 질문 : 어떻게 한 곳에서 핵심 알고리즘을 유지할 수 있지만 시퀀스 또는 쌍 연관 컨테이너의 값을 반복 할 수 있습니까?
감사합니다.
펑터가 정말 간결하기 때문에 나는 이것을 좋아한다. Mic와 Anon과 같은 아이디어. 하지만 나는 가장 우아하다고 생각합니다. 감사! –
@Chris - 동의합니다. remove_copy_if가 저 자신 (이상한 이름 지정)처럼 행동했는지는 몰랐습니다. 분명히 그것을 내 무기고에 추가 할 것입니다. :). – Mic