2014-07-16 2 views
0

C++에서지도에 세 개의 매개 변수를 전달하고 싶습니다. 삽입 기능을 사용하는 동안 오류가 표시됩니다. 이것에 대한 대체 방법이 있습니까? 나는 ((정수 정수) 문자열)지도에 세 개의 매개 변수를 전달하면 오류가 표시됩니다.

int main() 
{ 
    map < map <int, int>, char[50] > Code; 

    int TestCases,Queries,a,b; 
    char Name[50]; 
    scanf("%d",&TestCases); 

    for (int i = 0; i < TestCases; i++) 
    { 
     scanf("%d %d %s",&a,&b,Name); 
     Code.insert(make_pair(make_pair(a,b),Name[50]));// Error Line 
    } 
} 

나는 다음과 같은 오류 얻을 쌍 만들고 싶어 :

C2664: 'void std::_Tree < std::_Tmap_traits < _Kty,_Ty,_Pr,_Alloc,false >> ::insert(std::initializer_list<const _Kty,_Ty >>)' : cannot convert argument 1 from 'std::pair < std::pair < int,int > ,char > ' to 'std::pair < const _Kty,_Ty >

+0

다른 컨테이너의 키로 맵과 std :: map이 이상하고 성능에 영향을 미칠 수 있습니다. 이것은 의도 한 목표입니다. – NetVipeC

+0

완전한 오류 메시지는 아닙니다. – Yakk

답변

2

, 그것은 보인다 지도에서 C 문자 배열 대신 C++ 문자열 클래스를 사용하는 것이 좋습니다.

std::map< std::pair<int,int>, std::string > Code; 
0

그냥 [50] 배열 인덱스에 '이름'포인터가 아닌 인덱스를 제공을 .

Code.insert(make_pair(make_pair(a,b),Name)); 

은 또한지도 선언을 변경해야 할 수도 있습니다 :

map < map <int, int>, char* > Code; 

그러나 나는 그것에 대해 긍정적 아닙니다. 당신이 문자열을 저장하는 경우,

std::map< std::pair<int,int>, char[50] > Code; 

또한 : 당신이 정말 키가 INT의 쌍,하지, int 형과 같이하는 INT의지도가되고 싶어요처럼 사용으로 판단

+0

작동하지 않습니다. – dabs

0
  1. 변경

    map < map <int, int>, char[50] > Code; 
    

    map <pair <int,int>, string > Code; 
    

    이 내가 아닌 당신이 원하는 가정 무엇 각 stringint 년대의 하나의 쌍을 연결합니다 map 전체를 각각 한 쌍으로 만 연결하면 string, 이것은 귀찮고 낭비가됩니다.

  2. char[50]을 모두 string으로 변경하십시오. 그들은 당신을 훨씬 잘 섬길 것입니다. 에

  3. 변경 라인 # 11합니다 (make_pair 라인) : 사용자가 원하는대로

    Code.insert(pair<pair<int,int>,string>(pair<int,int>(a,b),Name)); 
    

    이 제대로 Code을 채울 것입니다.

또한, 나는 C 함수이다 coutcin보다는 scanf을 사용하는 것이 좋습니다 수 있습니다. 그들은 또한 훨씬 더 관대합니다.

관련 문제