C++;Python字典的等价物
我目前正在用AI制作一个tic-tac-toe程序,在翻译这行代码(python)时遇到了一些问题: 变成C++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 },
有什么建议?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>,具有对数查找和插入复杂性。但是pythondict
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 };