建議任何方法爲key及其值排序multimap。例如 - 輸入- (5,1),(1,9),(1,1),(5,2),(1,2) 並且輸出必須爲- (1,1), (1,2),(1,9),(5,1),(5,2)。如何在multimap中對key和value進行排序?
回答
如果你真的想使用multimap,那麼值的排序總是你插入它們的順序,不能改變,不幸的是,例如在他們被存儲爲(1,9),( 1,1),(1,2),(5,1),(5,2)
如果您可以在multimap上放鬆一下,那麼您可以使用set並將上述對存儲在set中並在對定義中定義你想要的順序。因爲集合按照排序順序存儲值,所以它還會按照您定義的順序存儲對。
這是不正確的 - 插入到multimap中的元素按所使用的鍵排序。插入元素的順序不影響它們的存儲順序。 – millinon
我的意思是說,在一個multimap中,這些對按照它們的鍵的順序存儲,但是根據它們的值沒有正確的排序(在(鍵,值)對中的值),例如在給出的例子中它們被存儲爲(1,9),(1,1),(1,2),(5,1),(5,2)的問題。我想你誤解了我的回答 – user3203860
更改密鑰以包含兩個值。設計一個比較器,以正確的順序比較兩對值。
完成此操作後,您可以使用multiset而不是multimap。
你只需要它的所有元素複製到multiset<pair<int, int>>
:
multimap<int, int> a;
a.insert(pair<int, int>(5, 1));
a.insert(pair<int, int>(1, 9));
a.insert(pair<int, int>(1, 1));
a.insert(pair<int, int>(5, 2));
a.insert(pair<int, int>(1, 2));
multiset<pair<int, int>> b;
for (multimap<int, int>::iterator i=a.begin(); i!=a.end(); i++)
b.insert(pair<int, int>((*i).first, (*i).second));
在此之後,multiset<pair<int, int>> b
是你想要的,即{(1,1), (1,2), (1,9), (5,1), (5,2)}
。
答案是emplace_hint。僞代碼將如下所示: -
insert_with_hint(M mmap, K key, V Value)
{
auto i1 = mmap.equal_range(Key);
for (auto i2 = i1.first; i2 != i1.second; ++i2)
{
if (i2->second > Key) { // <-- Here add your sorting criteria
mmap.emplace_hint(i2,Key,Value)
return
}
}
mmap.emplace(Key,Value)
}
應該是被接受的答案。在創建'std :: multimap'時,我仍然不介意添加額外工作的情況下幫助了我。允許通過key和'equal_range()'(因此'std :: set'或'std :: multiset'不是替代選項)進行訪問,而對運行時的值進行更有效的比較。必須切換到g ++ 4.8(即使使用「std = C++ 11」,4.7也不提供emplace()和emplace_hint()。 – radix
- 1. 如何通過NSDate對NSMutableDictionary中的「key」和「value」進行排序?
- 2. 根據Value對Key進行排序HashMap?
- 3. Java如何對multimap進行排序vs?
- 4. 如何排序番石榴multimap? (KEY = DATE)
- 5. 如何在std multimap中替換<key, value>
- 6. 按鍵排序後按值對multimap進行排序
- 7. 如何在java中以排序形式存儲<key, value>對
- 8. 如何區分[key]和[value]與其他[key]和[value]的父數組[key]?
- 9. 如何在.CS端設置Key-value對?
- 10. PHP - 如何將數組從(Key,Value)轉換爲(Key,Value,Value)?
- 11. Multimap不排序
- 12. Key-Value Observing和RoboVM
- 13. 如何按每個鍵值的數量對Guava MultiMap進行排序
- 14. 如何在ios中對多個NSArray升序和降序排序進行排序
- 15. .NET - 有效的對排序<key, value>按值
- 16. 如何在swift中使用Key Value Observer?
- 17. 如何在地址之後使用?key = value&key = value進行正確的HTTP Post請求
- 18. 如何在groovy中對排序列表進行排序
- 19. Pyspark(key,value)對與(key,[值列表])
- 20. Mystery Key Value Coding Key
- 21. 如何對NSArray進行排序並在NSString中進行訪問?
- 22. C#:如何在保存前對XML進行排序和縮進?
- 23. scala map(「key」)=「value」如何轉換爲map.update(「key」,「value」)?
- 24. 如何在Linq中對象查詢進行排序和分組?
- 25. 如何在Android中對日期和空日期進行排序?
- 26. 如何在Python中對IP地址和整數進行排序?
- 27. 如何在JavaScript和/或jQuery中對多列進行排序
- 28. POST key = value對攻城
- 29. 轉換數組key/value對
- 30. 如何對json對象進行排序?
具有相同密鑰的值的順序是插入順序。這是不可能改變的。 –
將實體複製到'std :: multiset>'。 –
WhozCraig
'std :: map>'可能是另一種選擇。 'std :: set'插入了排序的元素,並且可以爲更復雜的元素定義比較。 –
radix