차근차근/C

Map 클래스에 벡터를 key 나 value 로 하고 싶으면 어떻게 해야 하나요?

예쁜꽃이피었으면 2014. 8. 19. 11:04

검색어 : map의 value가 vector


http://pgr21.com/pb/pb.php?id=bug&no=60211


map 을 사용하는데 궁금한게 있어서 질문합니다.


map 을 선언할 때

map<vector<string>, string> map1;

이런 식으로 선언한다면(즉 key 값을 vector 로 하고 싶다면) 어떻게 key 값을 insert 할 수 있나요?

혹시 무리한 시도를 하는건가요;

답변 주시면 감사하겠습니다~

ThEnd.



두 가지 방법 있습니다. [] 연산자 활용이랑, pair<> 활용 

#include <iostream> 
#include <string> 
#include <vector> 
#include <map> 

using namespace std; 
typedef vector<string> key; 
typedef string data; 
typedef map<key,data> cont; 
void main() 


cont map1; 

key vec_str1, vec_str2; 
vec_str1.push_back("A"); 
vec_str1.push_back("B"); 
vec_str1.push_back("C"); 

vec_str2.push_back("1"); 
vec_str2.push_back("2"); 
vec_str2.push_back("3"); 
vec_str2.push_back("4"); 

map1[ vec_str1 ] = "ABC"; // 1. [] 연산자 사용 
map1.insert( pair<key,data> (vec_str2, "1234") ); 

for (cont::const_iterator it= map1.begin(); it!= map1.end(); it++) { 
const key& k = it->first; 
const data& d = it->second; 
cout << "#key: "<< k.size() << ", data= " << d << endl; 


getchar(); 
}




감사합니다. vec 을 통째로 넣는군요. 

음; 그런데 map 에 key 와 data 를 따로 넣기는 여전히 아리송하네요. 
insert 나 [] 연산자를 사용해도 map1[vec_str1[0]] 에는 value 를 넣을수가 없으니까요.



map 구조를 key,data 로 잡아놓고 vec_str1[0] 을 넣을 수는 없죠. 그렇게 하려고 하셨다면 

typedef string key; 
typedef string data; 
typedef map<key,data> cont; 

로 잡으셨어야죠. key 와 data 는 같이 넣는거구요. 따로 넣을 수는 없습니다.


그렇군요. 
제가 본문에 말했던 
map<vector<string>, string> map1; 
이라는 구조는, map 의 key 값을 vec[0], vec[1], vec[2].. 등등으로 잡아놓고 
각각의 key 에 "Lim", "Lee", "Choi" 등을 value 를 묶을 수 있지 않을까... 하는 생각이었습니다. 
vec[0] 의 값은 "Yo Hwan" 으로 하고요. 
그래서 Last name 을 key 로, First name 을 value 로 하는 맵을 생각했습니다. 

문제에서 'Key 는 이름의 벡터가 되는 맵을 정의해라' 라는 말을 제가 좀 이상하게 해석했나봅니다. 답변 감사합니다.





반응형