2010-01-20 5 views
3

나는 float 값의 이름을 기반으로 빠른 조회를 할 수 있도록 std::map<std::string, float>을 가지고 있지만 정렬 된 것처럼 다음 float 값을 찾을 필요가있는 상황이 생깁니다 수치 적으로. 지도가 정렬되어 있기 때문에 반복기를 사용할 수 없습니다. 내 세트가 포함 된 경우 그래서 :std :: map의 다음 값

std::pair<"One", 1.0> 
std::pair<"Two", 2.0> 
std::pair<"Three", 3.0> 
std::pair<"Four", 4.0> 
std::pair<"Five", 5.0> 

나는 "세"다음에 다음 값을 찾으려면, 어떻게이 작업을 수행하는 가장 효율적인 방법이 될 것입니다? 이 경우의 예상 출력은 4.0입니다. 전체 목록을 반복하고 현재 값과 함께 최대 값을 저장할 수 있습니다. 이것이 최선의 방법입니까?

+0

감사합니다. 나는 코드 블록 코드를 만드는 것을 잊었다. :) –

답변

6

노멀 맵 대신 Boost::bimap을 사용하고 싶을 것입니다.이 기능은 아주 직접적으로 제공됩니다.

+1

나는 하겠지만 나는 할 수 없다. 라이센스 제한으로 인해이 코드를 코드 기반으로 가져갈 수 없습니다. –

+0

어떤 제한 사항이 있습니까? Boost 라이센스는 실제로 어떤 프로젝트에도 상업적으로 포함될 수 있도록 설계되었으며 아마도 내가 알고있는 것 중 가장 관대합니다 (BeerWare에 따라). –

+0

부스트 라이센스는 가장 관대 한 라이선스 중 하나입니다. 어떤 문제가 있습니까? –

1

Boost를 실제로 사용할 수 없다면 맵 옆에 별도의 수레 세트를 유지할 수 있습니다 (동기화를 유지하는 데 매우주의하십시오). 그럼 당신은 당신이이 조회에 원하는 것을 찾을 수 있습니다 편집, Prasoon에 대한

set<float>::const_iterator found = set.find(map["Three"]); 
++found; 
assert(*found == 4.0); 
관련 문제