2014-12-28 41 views
2

我目前使用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++

有什麼建議嗎?

+0

如果您提供了一些正在使用的「RANKS」的上下文,那麼您更有可能獲得有用的幫助。 –

+0

[翻譯Python字典到C++]可能的重複(https://stackoverflow.com/questions/1842941/translating-python-dictionary-to-c) – Trilarion

回答

3

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在行爲方面更接近匹配。

+0

如果我使用map,它會有什麼區別嗎? –

+0

@JennyCalisay在這種情況下,主要的區別在於時間複雜性。 'std :: map'是一個自平衡二叉搜索樹,'std :: unordered_map'是一個哈希表。查找分別爲O(log N)vs)(1),但如果您關心性能,則應該使用兩者來分析代碼。 – juanchopanza

0

在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 } 
    } 
}; 
+1

更像是一個'unordered_map',不是? – juanchopanza

+1

是否可以使用這個映射? –

+1

正確,它是'unordered_map'而不是'map' – jamylak

0

的C++當量dictstd::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); 
0

雖然「語言等效」可能我像一個std::unordered_map你的使用情況可與直陣列中更有效地提供服務:

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

你可以使用地圖或unordered_map這(和他們會工作正常),但考慮到你的密鑰是一組密集的整數(即從0到N的所有整數),有更好的選擇。

我可能會使用std::array來代替。這將是這個樣子:

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

這給了幾乎相同的語法和觀察到的行爲,但通常會節省相當多的內存和CPU大概時間爲好。