2016-02-25 69 views
0
map<vector<int>,int> > mymap 

我想知道如果地圖中的項目順序可以改變,如果在mymap上沒有做任何事情。也就是說,假設地圖有3對,我叫1 2 3,當我進入地圖絲毫驗證碼:未更改地圖元素的恢復順序始終相同?

for(auto i = mymap.begin();i!=mymap.end();i++) 
{ 
    cout<<i->first<<endl; //operator<< is redefenid 
} 

元素順序返回:3 2 1 後來未做任何使用上面相同的代碼更改地圖我有保證,元素按照與以前相同的順序被訪問(即3 2 1)? (I使用C++ 11)

+2

根據關鍵詞總是有詞彙順序(你不應該改變)。 – Jarod42

+1

@ Jarod42因此,如果我不對容器進行破壞性操作,我保證元素的恢復順序是相同的? – Umbert

+1

@Umbert你想說的是,如果你沒有觸摸地圖中用作鍵的容器,甚至沒有觸及它,那麼它是保證元素恢復的順序是相同的! – Deepanshu

回答

0

std::map<Key, Value, Comparer>,元件根據KeyComparer排序。 Comparer仍然應該給出2個給定鍵的相同結果,並且鍵不應該被修改(從Comparer的角度來看)。

所以,如果你重複一次,並有key1 < key2 < key3 那麼即使添加/刪除之後,你仍然有這些相對順序:key1 < keyA < key2 < keyB < key3
或者如果你只是刪除key2key1 < key3