2012-12-29 10 views
2

이것은 처음으로 쌍으로 작업하며 완전히 혼란 스럽습니다. 지도를지도에 삽입하는 방법으로 쌍을 초기화하는 방법은 무엇입니까?
이에 대한 표준 라이브러리를 포함해야합니까?표준 쌍 초기화

#include <string> 
#include <map> 
using namespace std; 
class Roads 
{ 
public: 
    map< pair<string,string>, int > Road_map; 
    void AddRoad(string s, string d) 
     { int b = 2 ; Road_map.insert(pair<s,d>, b) ; } //pair<s,d> is wrong here. 

}; 

답변

4

사용할 수 std::make_pair :

Road_map[make_pair(s, d)] = b; 
을하지만,이 액세스 할 수있는 가장 쉬운 방법은 사용하는 형식 정의입니다

또는 다음과 같이 std::pair을 만들 수 있습니다.

Road_map[pair<string,string>(s,d)] = b; 

std::make_pair 접근 방식을 사용하면 sd 유형의 이름을 지정하지 않아도됩니다.

여기서 적절한 함수는 operator[]이고 insert이 아니라는 점에 유의하십시오. std::map::insert은 삽입하려는 키와 값을 포함하는 std::pair 인 단일 인수를 취합니다.

Road_map.insert(pair<const pair<string,string>, int>(make_pair(s, d), b); 

당신은 typedef이 조금 더 예쁘게 만들 수 있습니다 : 당신은 다음과 같은 것을 수행해야

typedef map<pair<string,string>, int> map_type; 
Road_map.insert(map_type::value_type(map_type::key_type(s, d), b)); 
3

std::make_pair을 대신 사용하십시오. 그래서 같이하십시오 map<K, T>를 들어

#include <string> 
using namespace std; 
class Roads 
{ 
public: 
    map< pair<string,string>, int > Road_map; 
    void AddRoad(string s, string d) 
    { 
     int b = 2 ; 
     Road_map[make_pair(s,d)] = b; 
    } 

}; 
+1

내가 미쳐가는 또는 insert'이 걸릴 것으로 예상되는'때문에 작동하지 않습니다나요 'value_type'의 단일 인수 (키와 값을 가진 쌍)? key와 value 인수를 취하는'insert'는 없습니다. –

+0

이것은 작동하지 않았습니다. 다음과 같은 오류가 발생했습니다 : 'std :: pair <_Ty1,_Ty2>'에서 'std :: _ Tree <_Traits> :: const_iterator'로 매개 변수 1을 변환 할 수 없습니다. 이 경우 어떻게 사용해야합니까? – Ever

+0

@sftrabbit 당신이 맞습니다. 충분히 흥미롭게도 나는 그것을 충분히 보지 못했습니다. – Rapptz

1

value_type 실제로 pair<K const, T>입니다. C++ 11에서

typedef std::pair<std::string, std::string> string_pair; 
typedef std::map<string_pair, int>    map_type; 

// ... 

Road_map.insert(map_type::value_type(map_type::key_type(s, d), b)); 

당신은 쉽게 emplace 인터페이스를 사용할 수 있습니다 :

Road_map.emplace(map_type::key_type(s, d), b);