我有兩個地圖:如何根據C++中的其他地圖對地圖進行排序?
map< T t, int v> map1;
map< T t, int v> map2;
根據MAP1的價值我怎麼能排序MAP2? (或將結果保存爲向量?) 有沒有簡單的方法來實現這個?
我有兩個地圖:如何根據C++中的其他地圖對地圖進行排序?
map< T t, int v> map1;
map< T t, int v> map2;
根據MAP1的價值我怎麼能排序MAP2? (或將結果保存爲向量?) 有沒有簡單的方法來實現這個?
您無法對std::map
進行排序。地圖是總是保存在按鍵的排序順序。這是數據結構的一個基本不變量,並且沒有什麼可以改變這一點。你能做的最好的是地圖複製到不同的容器中,並重新安排之一,例如:
std::vector<std::pair<T, int>> v(map1.begin(), map1.end());
謝謝,有人告訴我定義一個結構來將Value1和Value2與鍵相結合,然後使用一個向量對結構進行排序。 – Keosu
正如Kerrek說,你可以簡單地從begin
和end
迭代地圖的構建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));
也許你可以舉一個你想在這種情況下排序的小例子嗎?這是一個非常廣泛的術語。 – Gian