2014-05-11 137 views
1

如何通過按鍵的輸入順序輸出散列表值? 在C++ 11 unordered_map中,它沒有排序。看看C++參考頁如何通過輸入順序輸出C++ 11 unordered_map/unordered_set和Java HashMap/HashSet值?

http://www.cplusplus.com/reference/unordered_map/unordered_map/begin/

mymap = {{"Australia","Canberra"},{"U.S.","Washington"},{"France","Paris"}}; 
    std::cout << "mymap contains:"; 
    for (auto it = mymap.begin(); it != mymap.end(); ++it) 
    std::cout << " " << it->first << ":" << it->second; 

輸出序列是

MyMap中包含:法國:巴黎澳大利亞:堪培拉美國:華盛頓

但是我希望澳大利亞:堪培拉美國:華盛頓法國:巴黎

如何輸出以上結果?以及如何在Java中實現(我在HashSet/HashMap中測試,密鑰 也沒有排序)?

謝謝!

+0

不能使用鏈表*和*哈希表?或者你還需要刪除嗎? –

回答

2

在Java中,您可以使用LinkedHashMapLinkedHashSet。下面是LinkedHashMap的,一個打印在同一順序的條目,因爲它們分別插入圖的例子:

Map<String, String> map = new LinkedHashMap<>(); 
map.put("Australia", "Canberra"); 
map.put("U.S.", "Washington"); 
map.put("France", "Paris"); 
for (Map.Entry<String, String> e : map.entrySet()) { 
    System.out.printf("%s:%s\n", e.getKey(), e.getValue()); 
} 

對於C++看一看Boost Multi-Index Containers。您可以在教程中的sequenced indices部分找到類似的示例。在你的情況下,它可能看起來如下:

struct country 
{ 
    std::string name; 
    std::string capital; 
}; 

multi_index_container< 
    country, 
    indexed_by< 
     hashed_unique<member<country,std::string,&country::name>> 
     sequenced<>>> countries; 
0

本身的unordered_map是概念上的無序:-)

但想想保持鍵列表,以保持插入順序的軌道

然後

for (auto& key : KeyOrderList) 
    cout << "(" << key << ", " << MyMap[key] << ")" << endl; 
0
#include <iostream> 
#include <unordered_map> 
#include <algorithm> 
#include <iterator> 
#include <vector> 

using namespace std; 
int main(int argc, char *argv[]) { 
    unordered_map<std::string, std::string> mymap = {{"Australia", "Canberra"},{"U.S.","Washington"},{"France","Paris"}}; 
    vector<std::string> keys; 
    transform(mymap.begin(), mymap.end(), back_inserter(keys), 
     [](const decltype(mymap)::value_type& pair) { 
      return pair.first; 
     }); 
    sort(keys.begin(), keys.end()); 
    cout << "mymap contains: "; 
    for (auto const& key: keys) { 
     cout << " " << key << ":" << mymap[key]; 
    } 
    cout << endl; 
} 
+0

糟糕。我現在看到這個問題問如何讓他們在輸入順序,而不是按鍵排序。 –