std::unordered_set(C++11)
unordered_set 是一种关联容器,set 和 map 内部实现是基于 RedBlackTree,unordered_set 和 unordered_map 是基于 Hashtable。红黑树有序,而哈希表无序。
特性
- 不再以键值对的形式存储数据,而是直接存储数据的值(只有一个值!)
- 容器内部存储的各个元素的值都互不相等,且不能被修改
- 不会对内部存储的数据进行排序
模板
1 2 3 4 5 6 7
| template < class Key, class Hash = hash<Key>, class Pred = equal_to<Key>, class Alloc = allocator<Key> > class unordered_set;
unordered_set<T> ans;
|
迭代器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| unordered_set<int>::iterator it_begin = ans.begin();
unordered_set<int>::iterator it_end = ans.end();
unordered_set<int>::const_iterator const_it_begin = ans.cbegin();
unordered_set<int>::const_iterator const_it_end = ans.cend();
unordered_set<int>::local_iterator local_iter_begin = ans.begin(1);
unordered_set<int>::local_iterator local_iter_end = ans.end(1);
|
一般操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| unordered_set<int>::iterator find_iter = ans.find(1);
ans.count(1);
pair<unordered_set<int>::iterator, unordered_set<int>::iterator> pair_equal_range = ans.equal_range(1);
ans.emplace(1);
ans.emplace_hint(ite_begin, 1);
ans.insert(1);
ans.erase(1);
ans.clear();
ans.swap();
ans.empty();
ans.size();
ans.max_size();
ans.bucket_count();
ans.max_bucket_count();
ans.bucket_size(3);
ans.bucket(1);
ans.load_factor();
ans.max_load_factor();
ans.rehash(1);
ans.reserve(1000);
auto hash_func_test = ans.hash_function();
auto key_eq_test = ans.key_eq()
|
基本上以上就是全部使用的方法