2011-11-11 3 views
0

다음 자바 메서드는 해시 테이블의 키를 열거 형으로 반환합니다.C++에서 함수의 반환 형식으로 열거

Hashtable<String, Object> props = new Hastable<String, Object>(); 

// some code here 

public final Enumeration getPropertyURIs() { 
    return props.keys(); 
} 

이 코드를 C++로 변환하고 싶습니다.

보다 구체적으로, std :: map 키의 열거 형을 반환하는 C++에서 동일한 함수를 구현하는 방법은 무엇입니까?

+3

내가 돈 ' 자바 알지는 못하지만 C++의 열거 형은 자바의 열거 형에 가까운 _조차 없다. C++의'enum'은 몇 가지 상수를 나열하는 편리한 방법입니다. –

+0

"enum of keys"란 무엇을 의미합니까? C++에서지도의 키는 고정 유형이며 그 유형에 대해서만 말할 수 있습니다. (키 유형 *은 물론 열거 형일 수 있습니다.) –

+2

[this] (http://stackoverflow.com/questions/110157/how-to-retrieve-all-keys-or-values-from)과 중복 될 수 있습니다. -a-stdmap) – moooeeeep

답변

0

C++의 enum은 단지 상수 집합입니다.

이런 뜻인가요?

typedef std::unordered_map<std::string, boost::any> props_t; 
props_t props; 

std::vector<std::string> getPropertyURIs() 
{ 
    std::vector<std::string> keys; 
    for (props_t::const_iterator i = props.begin(); i != props.end(); ++i) 
    { 
     keys.push_back(i->first); 
    } 
    return keys; 
} 
+2

'getPropertyURIs'가 출력 반복자를 가지면 (그것의 타입은 입력으로 템플릿 매개 변수'를 취하고 거기에' 벡터'. –

+1

이것은 OP가 그가 필요하다고 생각한 것일 수도 있지만 이런 종류의 것은 아마도 C++에서는 불필요 할 것입니다. 키가 필요하면 직접지도를 반복하면됩니다. –

+0

또는 for_each()를 호출하십시오. –

2

가장 가까운 것은 얻을 수있는 것은 반복자를 반환하는 것입니다. 문제는 실제로 범위를 지정하기 위해 두 개의 반복자가 필요하다는 것입니다. 당신이 이런 식으로 작업을 수행 할 수 있습니다, 당신은 지금 vector의 모든 키를 저장하려면

template<class output_iterator_type> 
void getPropertyURIs(output_iterator_type out) { 
    // loop copied from @dalle 
    for (props_t::const_iterator i = keys.begin(); i != keys.end(); ++i) 
    { 
     *out = i->first; 
     ++out; 
    } 
} 

:이 극복하는 한 가지 방법은 출력 반복자를 사용하는 것입니다

std::vector<std::string> keys; 
getPropertyURIs(std::back_inserter(keys)); 
+0

@ 달걀 : 내 코드를 고쳐 주셔서 감사합니다 :) –

+0

+1 : 내 대답보다 더 적절하고 적절합니다. – dalle

+0

답변 해 주셔서 감사합니다. –