2011-11-26 37 views
0

我有兩個地圖:如何根據C++中的其他地圖對地圖進行排序?

map< T t, int v> map1; 
map< T t, int v> map2; 

根據MAP1的價值我怎麼能排序MAP2? (或將結果保存爲向量?) 有沒有簡單的方法來實現這個?

+1

也許你可以舉一個你想在這種情況下排序的小例子嗎?這是一個非常廣泛的術語。 – Gian

回答

3

您無法對std::map進行排序。地圖是總是保存在按鍵的排序順序。這是數據結構的一個基本不變量,並且沒有什麼可以改變這一點。你能做的最好的是地圖複製到不同的容器中,並重新安排之一,例如:

std::vector<std::pair<T, int>> v(map1.begin(), map1.end()); 
+0

謝謝,有人告訴我定義一個結構來將Value1和Value2與鍵相結合,然後使用一個向量對結構進行排序。 – Keosu

0

正如Kerrek說,你可以簡單地從beginend迭代地圖的構建std::vector< std::pair< T, int> >,但這會也給你的關鍵和價值觀。你可以使用std::transform來得到下面的值:

std::map<int, int> m = { {1,-1}, {2,-2} }; 
std::vector<int> v; v.reserve(m.size()); 
std::transform(m.begin(), m.end(), std::back_inserter(v), 
       [](const std::pair<const int, int>& p) 
       { return p.second; }); 
// or 
std::transform(m.begin(), m.end(), std::back_inserter(v), 
       std::bind(&std::pair<const int, int>::second, std::placeholders::_1)); 
相關問題