因此,我正在编写一个小的代码,以从字符串中删除重复的字符。我已经使用 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来跟踪重复项。

关于c++ - 打印unordered_set的元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29424014/

10-11 08:13