Python字典的C++等价物

2024-03-29 00:12:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在用人工智能制作一个tic-tac-toe程序,我在翻译这行代码(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++ +/P>

有什么建议吗?


Tags: 代码程序tic人工智能建议dicttactoe
3条回答

C++中最匹配的是^{}。这是一个哈希表,将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++标准库也有^{}类模板,它允许您创建类似但有序的EEM>查找表{< CD6>},具有对数查找和插入复杂性。但是pythondict是散列表,因此unordered_map在行为上更接近匹配。

<>在C++中,这将是一个^ {< CD1>}

#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 }
    }
};

你可以使用一个映射或无序映射(它们可以很好地工作),但是考虑到你的键是一个密集的整数集(即从0到N的所有整数),有更好的选择。

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

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

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

相关问题 更多 >