我目前正在使用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 ++
有什么建议吗?
答案 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};