Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;Python字典的等价物_Python_C++ - Fatal编程技术网

C++;Python字典的等价物

C++;Python字典的等价物,python,c++,Python,C++,我目前正在用AI制作一个tic-tac-toe程序,在翻译这行代码(python)时遇到了一些问题: 变成C++ 有什么建议?C++中的 < P>这将是 STD::无序的映射< < /P> #include <unordered_map> std::unordered_map<int, int> dict { { { 4, 3 }, { 0, 2 }, { 2, 2 }, { 6, 2 }, { 8, 2 },

我目前正在用AI制作一个tic-tac-toe程序,在翻译这行代码(python)时遇到了一些问题:

变成C++


有什么建议?C++中的

< P>这将是<代码> STD::无序的映射< <代码> < /P>
#include <unordered_map>

std::unordered_map<int, int> dict
{
    {
        { 4, 3 },
        { 0, 2 }, { 2, 2 }, { 6, 2 }, { 8, 2 },
        { 1, 1 }, { 3, 1 }, { 5, 1 }, { 7, 1 }
    }
};
#包括
std::无序映射dict
{
{
{ 4, 3 },
{ 0, 2 }, { 2, 2 }, { 6, 2 }, { 8, 2 },
{ 1, 1 }, { 3, 1 }, { 5, 1 }, { 7, 1 }
}
};

<代码> > Python的代码> DICT<代码>的C++等价物是代码> STD::MAP< /Cord>。要使用类似语法初始化映射,请执行以下操作:

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++中最接近的匹配项是这是一个哈希表,将
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 }
};
<>请注意,C++标准库也有类模板,它允许您创建类似但有序的查找表<代码> STD::MAP< /COD>,具有对数查找和插入复杂性。但是python
dict
s是散列表,因此
unordered_map
在行为上更接近匹配。

尽管“语言等价物”可能类似于
std::unordered_map
但您的用例可以通过直接数组更有效地服务:

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

您可以使用映射或无序的_映射(它们可以很好地工作),但是如果您的键是一组密集的整数(即从0到N的所有整数),则有更好的选择

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

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

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

如果您提供所使用的
列组的上下文,您更有可能获得有用的帮助。可能会重复类似于
无序图的,没有?如果我在这上面使用映射可以吗?正确,这是
无序的地图
而不是
地图
@juanchopanza是的,你是对的。当你注意到我注意到每一对的第一个元素实际上是唯一的,并且对应于看起来像一维数组的索引。如果我用map来代替,会有什么不同吗?@JennyCalisay在这种情况下,主要的区别是时间复杂度
std::map
是一个自平衡二叉搜索树,
std::unordered_map
是一个哈希表。查找分别是O(logn)和(1),但如果您关心性能,您应该使用这两种方法来分析代码。
std::cout << RANKS[0] << std::endl; // prints "2"
int RANKS[] = {2, 1, 2, 1, 3, 1, 2, 1, 2};
std::array <char, 9> vals = { 2, 1, 2, 1, 3, 1, 2, 1, 2 };