打印无序集合的元素



所以我正在编写一个小代码来删除字符串中的重复字符。我已经用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;
}

然而,这些元素是按插入的相反顺序打印的。输出为gfedcba。请有人解释一下为什么?

按照原始顺序打印元素的最佳方式是什么。在unordered_set中没有运算符--(),因为它有前向迭代器。

谢谢!

您不能

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

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

vector(或者更好的是,deque)将是这里合适的输出容器,但您可以使用额外的临时set来在迭代时跟踪重复项。

最新更新