【问题标题】:I want to create something like a python dictionary in C++我想在 C++ 中创建类似于 python 字典的东西
【发布时间】:2016-05-07 22:29:54
【问题描述】:

我正在使用结构。有没有办法遍历所有“数字”类型的项目?

struct number { int value; string name; };

【问题讨论】:

  • 我不确定这个问题。在 C++ 中,我们有“映射”,即 std::mapstd::unordered_mapSee here 获取标准数据结构列表。
  • 如果你想创建一个类似python的字典,那么你想实现一个hashmap。因此,请按照 cmets 和答案部分中的建议查看 std::mapstd::unordered_map。 C++实现示例here.

标签: python c++


【解决方案1】:

据我了解,您希望使用number 访问valuename。你可以去array of structurelike number n[5]; 其中n[0],n[1],...n[4] 但是我们在 C++ 中有一些额外的功能可以通过预定义的map, set 来实现这一点 你可以找到很多地图的例子

【讨论】:

    【解决方案2】:

    在 c++ 中,map 的工作方式类似于 python 字典,但两种语言有基本的区别。 C++ 是有类型的,python 有鸭子类型。 C++ Map 是类型化的,它不能接受任何类型的(键,值),如 python 字典。 一个更清晰的示例代码 -

      map<int, char> mymap;
      mymap[1] = 'a';
      mymap[4] = 'b';
      cout<<"my map is -"<<mymap[1]<<" "<<mymap[4]<<endl;
    

    您可以使用技巧来获得一个可以接受任何类型密钥的地图,请参考 - http://www.cplusplus.com/forum/general/14982/

    【讨论】:

      【解决方案3】:

      您可以使用std::map(或unordered_map

           //  Key  Value Types.
      std::map<int, std::string> data {{1, "Test"}, {2, "Plop"}, {3, "Kill"}, {4, "Beep"}};
      
      for(auto item: data) {
                       // Key                  Value
          std::cout << item.first << " : " << item.second << "\n";
      }
      

      编译运行:

      > g++ -std=c++14 test.cpp
      > ./a.out
      1 : Test
      2 : Plop
      3 : Kill
      4 : Beep
      

      std::mapstd::unordered_map 之间的区别在于std::map 中的项目按Key 排序,而std::unordered_map 中的值没有排序(因此它们将以看似随机的顺序打印)。

      在内部,它们使用非常不同的结构,但我敢肯定您对这种详细程度不感兴趣。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-26
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多