C++无序列图来存储命令行参数

C++ unordered map to store command line parameters

本文关键字:存储 命令行 参数 无序 C++      更新时间:2023-10-16

我正在使用C++中的unordered_map和char*开发一个命令行程序。

但是,它不起作用。

这是我的代码。

#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评论中所说,您需要使用std::string而不是char*作为地图中的键类型。 您可以继续使用 char* 作为值类型,因为argv具有整个程序的生存期。

但是,如果您可以使用Boost,他们的程序选项库比任何手写的东西都要好。 不幸的是,由于您似乎正在使用Windows,因此您的平台不提供任何内置的东西,例如getopt_long(),但无论如何,Boost PO是C++中最好的工具。