在C ++中,我们使用set,multiset,unordered_multiset,unordered_set存储哈希集。C ++ set / multiset实现了一个Red-Black树,该树维护元素的顺序。另一方面,unordered_set和unordered_multiset基于Hashmap / Hashtable,因此不对元素进行排序。
multiset和unordered_multiset允许将重复项存储在集中。要遍历集合,我们可以使用简单的for循环:
#include <iostream>
#include <unordered_set>
using namespace std;
int main() {
unordered_set<int> data;
data.insert(5);
data.insert(3);
data.insert(2);
data.insert(3);
data.insert(6);
data.insert(7);
for (const auto &n: data) {
cout << n << endl;
}
return 0;
}
重复项仅存储一次。而且unordered_set不会对元素进行排序。因此,您可能会看到不同的顺序,例如7 6 2 5 3。
在C ++集上进行迭代是相似的。输出显示元素已排序。C ++集O(logN)更新/插入/删除/查询比unordered_set慢,后者具有O(1)恒定的复杂度。
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> data;
data.insert(5);
data.insert(3);
data.insert(2);
data.insert(3);
data.insert(6);
data.insert(7);
for (const auto &n: data) {
cout << n << endl; // prints 2 3 5 6 7
}
return 0;
}
对于multiset和unordered_multiset,在元素上进行迭代是相似的,只是结果将打印出重复项。
#include <iostream>
#include <set>
using namespace std;
int main() {
multiset<int> data;
data.insert(5);
data.insert(3);
data.insert(2);
data.insert(3);
data.insert(6);
data.insert(7);
for (const auto &n: data) {
cout << n << endl; // prints 2 3 3 5 6 7
}
return 0;
}
请注意,C ++多重集包含在集合头中,而unordered_multiset包含在unordered_set头中。
或者,我们可以递增迭代器,使其从集合的begin()到end():(集合,多集合,unordered_set和unordered_multiset)。我们使用* it取消引用迭代器指针。
#include <iostream>
#include <set>
using namespace std;
int main() {
multiset<int> data;
data.insert(5);
data.insert(3);
data.insert(2);
data.insert(3);
data.insert(6);
data.insert(7);
for (auto it = begin(data); it != end(data); it ++) {
cout << *it << endl; // prints 2 3 3 5 6 7
}
return 0;
}
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询