所以我正在编写一个小代码来删除字符串中的重复字符。我使用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中没有operator - (),因为它有前向迭代器。
谢谢!
答案 0 :(得分:4)
你不能。
无序集合没有任何固有的顺序。
这就是为什么它被称为无序集。
此处vector
(或更好,deque
)将是适当的输出容器,但您可以使用其他临时,{{ 1}},在迭代时跟踪重复项。