2017-11-08 2 views
0

멀티 맵이 있습니다.요소가 존재하는지 확인하십시오.

std::multimap<CString, CString> NameInsituteMap; 

그리고 이름과 연구소가 일치하지 않으면 true를 반환하는 함수를 작성해야합니다.

bool InsituteExist(const CString Name, const CString Insitute) 
{ 

} 

연구소가 있는지 없는지 비교할 수있는 모든 값을 찾을 수 있습니다.

모든 요소를 ​​반복하고 비교하는 대신 직접 수행하는 방법이 있는지 알고 싶습니다.

멀티 맵보다 다른 데이터 구조를 사용하는 것이 좋습니다.

+0

@BenVoigt 음을, 영업 이익은 말한다 종류의 모호, "연구소는 주어진 이름에 해당하는 경우". 이름과 가치가 모두 일치해야하는지는 명확하지 않습니다. –

+0

'multimap' 대신에 'std :: map > ' 과 같은 것을 원하는 것 같습니다. (여기서'string'은'CString','std :: string' 등이 될 수 있습니다.) –

+0

@IgorTandetnik - 예, name과 value가 일치해야합니다. – Geek

답변

0

주어진 키에 대한 멀티 맵에서 시퀀스 요소를 효율적으로 찾을 수 있습니다. 선형 검색보다이 시퀀스에서 특정 값을 찾는 더 좋은 방법은 없습니다.

std::map<CString, std::set<CString>>은 키와 연관된 세트에 값이 있는지 여부를 찾는 데 효율적인 대체 데이터 구조입니다. 그것은 조금 다른 인터페이스를 가지고 있지만. 단순히 키에 값을 삽입하는 대신 키의 값 세트를 "가져와"그 세트에 삽입해야합니다.

데이터 구조의 맵 측면이 다른 방식으로 사용되지 않으면 더 간단한 대체 방법은 std::set<std::pair<CString, Cstring>>을 사용하는 것입니다. 이것은 키 - 값 쌍이 세트에 있는지 테스트하는 데 쉽게 사용할 수 있지만 물론 멀티 맵에있는 다른 기능이 부족합니다.

+0

감사합니다. std :: set >을 사용하면 코드가 훨씬 간단 해졌습니다. – Geek

1

equal_rangemultimap에서 사용하십시오.

이 다음은 live example

+0

코드에 감사드립니다. std :: set >으로 결정했습니다. – Geek

관련 문제