2012-10-22 2 views
1

내가 한 쌍과 내가 같은사용하여지도

Key p (string1, string2); 
pair_map.insert(make_pair(p, double1)); 

으로 for 루프를 통해 그들에 개체를 삽입 같은

typedef pair<string,string> Key; 
typedef map< Key, double> Map; 

로 선언 된지도가 발행 지도에서 요소를 어떻게 찾을 수 있습니까? find를 사용하여 반복자를 설정하는 데 문제가 있습니다.

it = pair_map.find(make_pair(string1,string2))을 사용한다고 가정합니다.

pair_map<Key, double>::iterator it; 또는 map<Key, double>::iterator it;을 신고하려했지만 어느 쪽도 저에게 효과가 없습니다. 이 문제를 어떻게 해결할 수 있습니까? 내가 얻을

오류는 모든 때문에 긴 유효하지 않은 캐스트 오류가있는 타입 정의의

+2

무슨 오류가 있습니까? – slaphappy

+2

죄송합니다. 왜 가장 자연스럽고 실제로 정확한지를'map :: iterator' 시도하지 않으셨습니까? (가장 쉬운 방법은'auto'를 사용하는 것과는 별도로)? – jogojapan

+0

또한 쌍의지도를 여기에'Map'으로 정의한'typedefs '를 보시고'pair_map'으로 사용하신 것 같습니다. – slaphappy

답변

6
Map::iterator it = pair_map.find(make_pair(string1, string2)); 

물론 당신은 C에서

auto it = ...; 

또는

decltype(pair_map.begin()) it = ...; 

을 사용할 수 있습니다 ++ 11.

+0

make_pair에 'Key'를 권하고 싶습니다. –

4

당신은, C++ 11,

auto it = pair_map.find(make_pair(string1, string2)); 
1

반복자 유형의 변수 이름 만 입력 이름을 사용하지 마십시오, 예를 들어,

Map::iterator it = .... 

이 필요하거나 대신 : 그것은 혼란 이후

pair_map<Key, double>::iterator it; 

사용

Map::iterator it; 

또는

map<Key, double>::iterator it; 

사실, 당신은, 당신에게 map를 형식 정의를해서는 안된다. 어디서나 템플릿을 사용하십시오.

+1

typedef'ing 유형에있어 문제점은 무엇입니까? – Useless

+0

내가 말했듯이, 혼란 스럽기 때문에. 이것이지도 인 경우지도를 사용하면 독자는 자신이 사용할 수있는 방법을 알 수 있습니다. 그렇지 않으면 유형의 정의를 확인해야합니다. – slaphappy

+1

IMO를 통해 길고 중첩 된 유형 이름의 확장 성이 떨어집니다. 'map , double>'을 사용하지 않는다는 것에 주목합니다. 그렇다면 어떤 typedef가 좋고 혼동을 일으키는 지 어떻게 결정하고 있습니까? – Useless

2

pair_map 변수의 이름이 아니라 유형이다.

Map::iterator it = pair_map.find(make_pair(string1,string2)); 

은 (juanchopanza 말한대로)로, 작동 것이다

std::map<Key, double>::iterator it = pair_map.find(make_pair(string1,string2)); 

또는

auto it = pair_map.find(make_pair(string1,string2)); 

당신이 C++ (11)이있는 경우

.

관련 문제