如何将2个char*数组直接映射到std :: map <std :: string,std :: string>

0 c++ iterator stl map char

我有2个char数组,如"const char*arr1 [ArrSize] = {"Blah1","Wibble1","Shrug1"};".为了将它们放入向量中,我发现了一个很好的快速解决方案

void fillVecTest()
{
    const int ArrSize = 3;
    const char *arr1[ArrSize] = {"Blah1", "Wibble1", "Shrug1"};
    const char *arr2[ArrSize] = {"Blah2", "Wibble2", "Shrug2"};
    std::vector<std::string> vec1(arr1, arr1+ArrSize);
    std::vector<std::string> vec2(arr2, arr2+ArrSize);
    std::vector<std::string>::iterator l_It1Vec1;
    std::vector<std::string>::iterator l_It = vec1.end();
    l_It = find(vec1.begin(), vec1.end(), std::string("Blah1"));
    if(l_It != vec1.end())
    {
      size_t l_pos = l_It - vec1.begin();
      printf("found %s, pos=%u val: %s\n", l_It->c_str(),l_pos, vec2[l_pos].c_str());
    }
 }
Run Code Online (Sandbox Code Playgroud)

现在我认为也应该可以将两者直接放入地图中,因为arr1是关键,而arr2是值.我尝试了一些方法,但我没有成功.

void fillMapTest()
{
    const int ArrSize = 3;
    const char *arr1[ArrSize] = {"Blah1", "Wibble1", "Shrug1"};
    const char *arr2[ArrSize] = {"Blah2", "Wibble2", "Shrug2"};
    std::map<std::string,std::string> map1;//(pair(arr1,arr1), pair(arr1+ArrSize,arr2+ArrSize));
    std::map<std::string,std::string>::iterator l_It1Map1;
    //l_It1Map1 = find(map1.begin(), map1.end(), std::string("Blah1"));
    if(l_It1Map1 != map1.end())
    {
      printf("found key: %s, val: %s\n",l_It1Map1->first.c_str(), l_It1Map1->second.c_str());
    }

}


int _tmain(int /*argc*/, _TCHAR* /*argv[]*/)
{
  fillVecTest();
  fillMapTest();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为只需要解决函数"fillMapTest"中的注释行.Constuctor和find不能像我想的那样工作.

请问STL专家有什么想法吗?

Ker*_* SB 5

写这个最简单的方法:

std::map<std::string, std::string> m {
    { "key1", "value1" },
    { "key2", "value2" },
};
Run Code Online (Sandbox Code Playgroud)

这需要您的编译器支持初始化列表(C++ 11的一个特性).

  • @MatsPetersson我认为是时候假设人们有一个C++ 11编译器(至少是C++ 0x).如果他们想支持C++ 03,他们应该在问题中提到它(我的个人意见).是否有关于此的元讨论? (3认同)