std::map的背后数据结构
map背后的数据结构是红黑树,是一种特殊的avl平衡树,但并不需要子树的两边的绝对高度差为1,可以容忍为左边和右边的高度差不到2倍。
avl平衡树的主要特性为搜索、查找、删除的时间效率在最差的情况下均为log2(n)的时间效率。例如:1000个结点,最差为10次查找。
而红黑树优于avl树的特点在于并不需要为了平衡,过多进行旋转和交换的动作,减少这些动作的开销和损失。
红黑树的定义为:
节点只有两种颜色(黑色或者红色)
根和节点都是黑色
红色不能连续出现,所以红色节点的子节点一定是黑色。
从任意一个节点到叶子的每条路径上的黑色节点数目要保持一样。
[1].这个对插入的情形写的较为清楚。
http://blog.csdn.net/goodluckwhh/article/details/11804733
[2].http://daoluan.net/blog/rbtree-is-not-difficult/
这个对与stl有解释。
随机id全局ID的唯一性
这个方面也有许多的一些问题,没有最佳的解决方案。
- 最常用的是GUID,GUID的算法一般混合了本地网卡的MAC地址还有时间的随机性。
- 使用中心的ID生成系统,管理ID。简单可以使用数据库。数据库的方式有分为单表。(存在crash问题)。多个库。使用不同的step来区分。
Linux下进程通信的问题
- linux下的lock机制,效率,与epoll。