打印 unordered_set 的元素

use*_*006 1 c++ c++11

所以我正在编写一个小代码来删除字符串中的重复字符。我已经使用 map、vector 完成了它,但想使用 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;
}
Run Code Online (Sandbox Code Playgroud)

但是,元素的打印顺序与其插入顺序相反。输出是 gfedcba。请问有人可以解释为什么吗?

以原始顺序打印元素的最佳方法是什么。unordered_set 中没有 operator--() 因为它有前向迭代器。

谢谢!

Lig*_*ica 5

你不能。

无序集合没有任何固有的排序。

这就是为什么它被称为无序集。

一个vector(或更好,但一deque)将在这里适当的输出容器,但你可能会使得使用额外的,暂时的set重复的,跟踪,而你迭代。