2014-03-03 102 views
0

我是C++映射的新手。我想在我的程序中使用類似以下的地圖。在C++中使用映射<pair <int,int>,string>

std::map<std::pair<int,int>,string> pattern 

這裏的關鍵int,int實際上行的二維網格的位置和列位置和列是未知的最初。所以我曾經想過最初將列設置爲0.在程序過程中,它也可能是負面的。那麼任何人都可以幫助我如何訪問和設置這樣的地圖的元素?

+2

您是不是要找'的std ::地圖<性病::對,字符串> pattern'? – Brian

+0

絕對是。 – Joy

+2

究竟是什麼問題? 「map」類的文檔在設置/檢索元素方面非常清晰和簡潔。 http://en.cppreference.com/w/cpp/container/map – Jack

回答

1

你的問題並不完全清楚。但是這個小示例演示瞭如何初始化其關鍵字由行列對組成的映射(本例中爲10行和10列),每個鍵的值都是「行,列」模式。然後樣本迭代地圖並打印出地圖的每個鍵值對。

map<pair<int,int>,string> patterns; 

for (int i = 0; i < 10; i++) { 
    for (int j = 0; j < 10; j++) { 
     patterns[make_pair(i, j)] = std::to_string (i) + ", " + std::to_string (j); 
    } 
} 

for (const auto &pair : patterns) { 
    std::cout << pair.first.first << "," << pair.first.second << ": " << pair.second << '\n'; 
    //note pair.first in the row column pair, pair.first.first is the row, pair.first.second is the column, pair.second is the string pattern 
} 
0

只要你編譯C++ 11模式(其如在2014年,你應該),該對中的值可以被指定爲一個支撐-INIT列表,例如{ 4, -13 },在map的大部分界面功能中。這不適用於emplace或使用完美轉發的其他任何內容。

例如:

patterns[{ 1, 2 }] = "hello"; // set a given element 
patterns.at[{ 1, 2 }] = "Hello"; // alter a given pre-existing element 
foo(patterns.at[{ 1, 2 }]); // pass a (reference to) pre-existing element 
patterns.erase({ 3 , 4 }); // ensure that given element no longer exists 
相關問題