SET、MAP底层原理
1. SET
集合 | 底层实现 | 是否有序 | 是否可重复 | 是否可修改 | 查询效率 | 增删效率 |
---|---|---|---|---|---|---|
std::set | 红黑树 | 有序 | 否 | 否 | O(logn) | O(logn) |
std::multiset | 红黑树 | 有序 | 可 | 否 | O(logn) | O(logn) |
std::unorded_set | 哈希表 | 无序 | 否 | 否 | O(1) | O(1) |
2. MAP
映射 | 底层实现 | 是否有序(key) | 是否重复(key) | 是否修改(key) | 查询效率 | 增删效率 |
---|---|---|---|---|---|---|
std::map | 红黑树 | 有 | 否 | 否 | O(logn) | O(logn) |
std::multimap | 红黑树 | 有 | 可 | 否 | O(logn) | O(logn) |
std::unordered_map | 哈希表 | 无 | 否 | 否 | O(1) | O(1) |
3. 总结:
在STL中,虽然不同的底层实现的数据结构相同,但是分清不同的底层实现,了解其异同,根据不同的应用场景选择不同的底层实现,对提高程序的性能,减少不必要的计算大有用处。