2010-03-06 2 views
5

++ C의 3 개 요소와 맵에 삽입이 같은지도가 필요합니다.은 검색 및

+2

키는 어느 것입니까? – sbi

+0

여기서 혼란스럽지 않은지 확인하십시오. 순서 지정 명령 인 경우지도에 세 번째 요소가있을 수 있습니다. – Owl

답변

12

map은 하나의 키 유형 만 하나의 데이터 유형으로 매핑 할 수 있습니다. 데이터에 2 개의 요소가 포함되어 있으면 구조체 또는 std::pair을 사용하십시오.

typedef std::map<int, std::pair<float, char> > Maptype; 
... 
Maptype m; 
m[123] = std::make_pair(0.5f, 'c'); 
... 
std::pair<float, char> val = m[245]; 
std::cout << "float: " << val.first << ", char: " << val.second << std::endl; 
+0

참조를 할당하여지도에서 쌍을 복사하지 마십시오. std :: pair & val = m [245]; –

6

세 가지 요소가있을 수 없습니다. STL map은 키 - 값 쌍을 저장합니다. 당신은 당신이 키로 사용할 것을 결정할 필요가 있습니다. 일단 별도의지도에 아마, 둥지 다른 두를 수 수행하고로 사용하십시오 operator[] 또는 insert 멤버 함수를 사용하여지도에 삽입하기 위해

typedef std::map<int, std::map<float, char> > MapType; 

. find 구성원 기능을 사용하여 검색 할 수 있습니다.

MapType m; 
// insert 
m.insert(std::make_pair(4, std::make_pair(3.2, 'a'))); 
m[ -4 ] = make_pair(2.4, 'z'); 
// fnd 
MapType::iterator i = m.find(-4); 
if (i != m.end()) { // item exists ... 
} 

또한 Boost.Tuple을 볼 수 있습니다.

+0

정보 주셔서 감사합니다. 지도에서 쌍을 어떻게 검색합니까? m.find가 될 것입니까? (STD :: make_pair (3.2, 'a');? – John

+0

@ 존 : 항상 키를 검색합니다. 키가 'pair '유형 인 경우 다음과 같이 전달합니다. Map :: find'에 대한 인수입니다.지도에서 첫 번째 매개 변수는 키이고 두 번째 매개 변수는 키 값입니다. 복합 유형이 될 수 있지만 키는 항상 'const'이므로 사용할 수 없습니다. – dirkgently

+0

@dirkgently : 위의 예제는 두 개의 클래스 포인터 인스턴스와 문자열을 사용하면 작동하지 않습니다. typedef std :: map > – kar

6

사용 중

std::map<std::pair<int, float>, char> 

또는 올바른 중

std::map<int, std::pair<float, char> > 

.

+0

이전에는 오버로딩 된'연산자'나 정렬을 위해 함수 객체가 필요함에 유의하십시오 – sbi

+2

std :: pair는 이미 연산자를 가지고 있습니다. (사전 식 비교를합니다) – Tronic

+0

@ 트로닉 : sbi