hash_map底层是用hash表存储的,查询时间复杂度是O(1); unordered_map和hash_map基本一样,只是unordered_map已经加到C++11标准(编译时添加编译选项:--std=c++11),而hash_map未加入在C++11标准中。 由于map使用红黑树实现,所以是有序存储的,因此map的key需要定义operator<,而hash_map和unordered_map是基于hash无...
在C++中,std::unordered_map提供的bucket(key)方法实现了相同的功能,即计算键key在数组中位置,下面可以验证下bucket_index(...)的正确性。 int main(int argc, char const *argv[]) { std::unordered_map<int, int> map(5); // 桶的大小为5 int key = 8; // 如果 bucket_index(map, key) != ...
map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为: 插入: O(logN) 查看:O(logN) 删除:O(logN) unordered_map,unordered_set,unordered_multimap, and unordered_multiset 上述四种容器采用哈希表实现,不同操作的时间复杂度为: 插入:O(1),...
而std::unordered_map对应哈希表,哈希表的特点就是查找效率高,时间复杂度为常数级别O(1), 而额外空间复杂度则要高出许多。 所以对于需要高效率查询的情况,使用std::unordered_map容器,但是std::unordered_map对于迭代器遍历效率并不高。 而如果对内存大小比较敏感或者数据存储要求有序的话,则可以用std::map容器。
但是通常我们想度量的是计算时间。 接下来我们以插入排序算法为切入点一窥时间复杂度的计算方法。