2015-04-02 101 views
0

因此,我正在編寫一個小代碼以從字符串中刪除重複的字符。我已經使用map,vector完成了它,但是想要使用unordered_set。打印unordered_set的元素

#include <iostream> 
#include <unordered_set> 
#include <string.h> 

using namespace std; 

int main() { 
    char* str = "abbcdeffg"; 
    std::unordered_set<char> ump; 

    for(int i = 0; i < strlen(str) ; i++) 
    { 
     ump.insert(str[i]); 
    } 

    for (auto it = ump.begin(); it != ump.end(); ++it) 
    { 
     cout << *it; 
    } 
    return 0; 
} 

但是,元素正在以與插入順序相反的順序打印。輸出是gfedcba。請有人解釋爲什麼?

什麼是按原始順序打印元素的最佳方式。在unordered_set中沒有運算符 - (),因爲它有前向迭代器。

謝謝!

+5

這是因爲它是「** unordered **」 – avim 2015-04-02 23:19:21

+1

您可能想要將'strlen()'從循環中拉出。 – Arun 2015-04-02 23:23:04

+1

並停止從字符串文字初始化'char *'。 _years_沒有被允許。打開你的警告!!!!!!!! – 2015-04-02 23:51:51

回答

4

你不能。

無序集合沒有任何固有順序。

這就是爲什麼它被稱爲無序集。

一個vector(或更好,但一個deque)會在這裏適當的輸出容器,但你可能使用一個額外的,臨時set,以跟蹤複製的,而你迭代。