STL容器比较

1.map和unordered_map对比

1.1Map

map:基于红黑树,复杂度与树高相同,即O(logn)。
template <typename _Key, typename _Tp, typename _Compare = std::less<_Key>,
typename _Alloc = std::allocator<std::pair<const _Key, _Tp> > > class map

1.1.1优缺点

优点:1.map元素有序
2.红黑树的结构使得map的很多操作O(logn)下完成;
3.map的各项性能较为稳定,与元素插入顺序无关;
4.map支持范围查找。
缺点:1.占用的空间大
2.查询平均时间不如unordered_map

1.1.2使用方法::

map<string,string>mapstr;
注:如果是自定义类型的key,key需要重载<

2.1unordered_map

基于散列表,复杂度依赖于散列函数产生的冲突多少,但大多数情况下其复杂度接近于O(1)。
要求查找速率快,且对单次查询性能要求不敏感。
template<typename _Key, typename _Tp,
typename _Hash = hash<_Key>,
typename _Pred = equal_to<_Key>,
typename _Alloc = allocator<std::pair<const _Key, _Tp>>>
class unordered_map;

2.1.1优缺点

优点:1.查询速度快,平均性能接近于常数时间O(1)
2.平均插入速率较map快
缺点:1.元素无序
2.查询性能不太稳定,最坏时间复杂度可达到O(n)。

2.1.2使用方法

如果是自定义的key类型,需要分别重载 = 和自定义hash函数unordered_map 自定义键值类型方法见https://blog.csdn.net/y109y/article/details/82669620?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.baidujs
最常用方法,利用重载operator()的类,将哈希函数打包成可以直接调用的类。

struct SampleST
{
	char m1;
	double m4;
	int m3;
	bool operator==(const SampleST & p) const
	{
		return m1 == p.m1 && m4 == p.m4 && m3 == p.m3;
	}
};

struct myHashFuc
{
	std::size_t operator()(const SampleST &key) const
	{
		return std::hash<int>()(key.m3)^std::hash<double>()(key.m4);
	}
};
std::unordered_map<SampleST, string, myHashFuc> session_map;
SampleST st;
session_map[st] = "22";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值