我目前使用AI一個井字棋節目和我有一個位(蟒)一個麻煩平移這行代碼的:C++當量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++
有什麼建議嗎?
我目前使用AI一個井字棋節目和我有一個位(蟒)一個麻煩平移這行代碼的:C++當量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++
有什麼建議嗎?
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
s是散列表,所以unordered_map
在行爲方面更接近匹配。
如果我使用map,它會有什麼區別嗎? –
@JennyCalisay在這種情況下,主要的區別在於時間複雜性。 'std :: map'是一個自平衡二叉搜索樹,'std :: unordered_map'是一個哈希表。查找分別爲O(log N)vs)(1),但如果您關心性能,則應該使用兩者來分析代碼。 – juanchopanza
在C++中,這將是Python的的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 }
}
};
更像是一個'unordered_map',不是? – juanchopanza
是否可以使用這個映射? –
正確,它是'unordered_map'而不是'map' – jamylak
的C++當量dict
是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);
雖然「語言等效」可能我像一個std::unordered_map
你的使用情況可與直陣列中更有效地提供服務:
int RANKS[] = {2, 1, 2, 1, 3, 1, 2, 1, 2};
你可以使用地圖或unordered_map這(和他們會工作正常),但考慮到你的密鑰是一組密集的整數(即從0到N的所有整數),有更好的選擇。
我可能會使用std::array
來代替。這將是這個樣子:
std::array <char, 9> vals = { 2, 1, 2, 1, 3, 1, 2, 1, 2 };
這給了幾乎相同的語法和觀察到的行爲,但通常會節省相當多的內存和CPU大概時間爲好。
如果您提供了一些正在使用的「RANKS」的上下文,那麼您更有可能獲得有用的幫助。 –
[翻譯Python字典到C++]可能的重複(https://stackoverflow.com/questions/1842941/translating-python-dictionary-to-c) – Trilarion