2013-02-19 74 views
1

嗨我想寫一個函數,它從文件中讀取數據,然後將其保存在內存中。 該內存需要一個x和一個y值來標識。它可能不是線性的,在不同的x和y值之間可能會有較大的跳轉,並且值的數量是未知的,這排除了使用多維數組。使用多個鍵值爲std :: map C++

我想使用std :: map,因爲它可以滿足我的需求,但它不支持多個鍵值。我還可以使用什麼來存儲數據或者是否有合併X和Y值的方法,以便它們能夠在地圖容器中使用?

+0

你是什麼意思,它不支持多個鍵值? – Escualo 2013-02-19 17:04:10

+1

你打算如何處理這些值?快速檢查一個點是否存在? – ipc 2013-02-19 17:06:31

+0

您需要向我們解釋您計劃如何使用這些數據 - 換句話說,您是否需要能夠查找給定'x'位置的所有項目?或者在給定'y'的所有項目?或者矩形內的所有項目「(x1,y1,x2,y2)'?我們需要了解您的要求/需求以幫助您。 – 2013-02-19 17:16:29

回答

3

使一對xy值,並用其作爲重點:

std::map<std::pair<int, int>, whatever> 

注意,因爲它的立場,這將如果您遍歷對待x值更顯著比y值地圖按順序。如果你想讓y的值更加顯着,你可以先把它們放在一對。

+0

謝謝!我認爲這只是使用map :: insert! – Hjorthenify 2013-02-19 17:18:15

+0

@Hoorthenify:對於'insert',你也使用一對,但這是一對'',這是組成兩個不同部分的關鍵,所以插入你會使用srd:pair ,值>'。 – 2013-02-19 17:22:04

2

您應該使用std::pair爲重點,以您的地圖:

std::map<std::pair<int, int>, value_type> m; 

可以使用插入地圖:

m[std::make_pair(0, 0)] = some_value; 

如果你不關心你的元素的順序並希望更快地檢索和插入,請嘗試使用std::unordered_map

1

雖然你可以按照其他人的建議使用std :: pair,但我會認真考慮做一個包含數據成員的簡單類。它提高了可讀性,並且如果需要,還可以使用第3,第4,...個成員來擴展它。

如果你從std :: pair開始,然後你想添加第三個元素,你可能會試圖移動到std :: tuple,但是這會導致代碼不可讀。

簡單地做一個關鍵類,給它一個體面的構造函數(每個數據成員一個參數)。