C ++相当于Python词典

时间:2014-12-28 05:52:52

标签: python c++

我目前正在使用AI制作一个井字游戏程序,我在翻译这行代码(python)时遇到了一些麻烦:

RANKS = dict([(4,3),                       # center  = 3
              (0,2),(2,2),(6,2),(8,2),     # corners = 2
              (1,1),(3,1),(5,1),(7,1)])    # sides   = 1

进入C ++

有什么建议吗?

5 个答案:

答案 0 :(得分:12)

C ++中最接近的匹配是std::unordered_map<int, int>。这是将int个键映射到int值的哈希表。

#include <unordered_map>


std::unordered_map<int, int> RANKS = {
        { 4, 3 },
        { 0, 2 }, { 2, 2 }, { 6, 2 }, { 8, 2 },
        { 1, 1 }, { 3, 1 }, { 5, 1 }, { 7, 1 }
};

您可以使用operator[]访问元素,例如

std::cout << RANKS[0] << std::endl; // prints "2"

请注意,C ++标准库还具有std::map类模板,该模板允许您创建类似但有序查找表std::map<int, int>,具有对数外观 - 向上和插入的复杂性。但是python dict是哈希表,所以unordered_map在行为方面更接近。

答案 1 :(得分:2)

您可以使用map或unordered_map(并且它们可以正常工作)但是假设您的键是一组密集的整数(即所有从0到N的整数),则有更好的选择。

我可能会使用std::array代替。它看起来像这样:

std::array <char, 9> vals = { 2, 1, 2, 1, 3, 1, 2, 1, 2 };

这提供了几乎相同的语法和可观察行为,但通常会节省相当多的内存和CPU时间。

答案 2 :(得分:0)

在C ++中,这将是std::unordered_map

#include <unordered_map>

std::map<int, int> dict
{
    {
        { 4, 3 },
        { 0, 2 }, { 2, 2 }, { 6, 2 }, { 8, 2 },
        { 1, 1 }, { 3, 1 }, { 5, 1 }, { 7, 1 }
    }
};

答案 3 :(得分:0)

Python dict的C ++等价物是std::map。要使用类似的语法初始化地图,请执行以下操作:

std::map<int,int> myMap = {{4,3},                       # center  = 3
                           {0,2},{2,2},{6,2},{8,2},     # corners = 2
                           {1,1},{3,1},{5,1},{7,1}};    # sides   = 1

请注意,这需要C ++ 11。

如果您无法使用C ++ 11,请转到Boost.Assign中的map_list_of。他们页面的例子是:

using namespace boost::assign; // bring 'map_list_of()' into scope
std::map<int,int> next = map_list_of(1,2)(2,3)(3,4)(4,5)(5,6);

答案 4 :(得分:0)

虽然&#34;语言相当于&#34;我可能会像std::unordered_map那样使用直线阵列更有效地提供您的用例:

int RANKS[] = {2, 1, 2, 1, 3, 1, 2, 1, 2};