2013-09-27 4 views
-1

C++에서 unordered_map 및 char *을 사용하여 명령 행 프로그램을 개발 중입니다.명령 행 매개 변수를 저장하는 C++ 순서가 지정되지 않은 맵

그러나 작동하지 않습니다.

여기 내 코드입니다.

내 아규먼트 목록을 제공

#include "stdafx.h" 
#include <unordered_map> 

int main(int argc, char *argv[]) 
{ 
    std::unordered_map <char*, char*> hash; 

    for (int i = 1; i<argc; i++){ 
    if (argv[i][0] == '-'){ 
    hash[argv[i]] = argv[i+1]; 
    } 
} 

if (hash["-file"]){ 
    printf("Openning the file %s \n", hash["-file"]); 
}else{  
    printf("Error open files \n"); 
    return 0; 
} 

은} :

myprogram.exe -file "c:\myfile.txt" -option1 ..... 

이 입력 파일을 열 수 없습니다.

아무도 도와 줄 수 있습니까? @WhozCraig 코멘트에 말했듯이

당신에게

+4

필자가 * lookup * 키로 전달한'char * '가 * 삽입 * 키로 사용 된지도의 키와 같은 실제 주소가 아닌 것을 알려 드리겠습니다. 하나는'argv []'에서 왔고, 다른 하나는 읽기 전용 리터럴이다. * 대부분의 경우, 포인터는 ** 당신이 원하는 키가 아닌 **입니다. (유용 할 수있는 상황이 있지만, 분명히 그들 중 하나는 아닙니다). 존이 잠깐 여기에 그것을 올려 놓았습니다. 맵의 키 유형으로'std :: string'을 사용하십시오. – WhozCraig

답변

1

대단히 감사합니다, 당신은 당신의지도의 주요 유형으로 std::string 대신 char*을 사용해야합니다. argv에는 전체 프로그램의 수명이 있기 때문에 char *을 값 유형으로 계속 사용할 수 있습니다.

그러나 Boost를 사용할 수있는 경우 프로그램 옵션 라이브러리가이 손으로 쓴 것보다 낫습니다. 불행하게도 Windows를 사용하는 것처럼 보이기 때문에 플랫폼에 getopt_long()과 같은 기본 제공 항목이 없지만 Boost PO는 C++의 최상의 기능입니다.