loki::AssocVector 保留插入顺序的关系型结构
Link Share :https://zhiqiang.org/coding/loki-assoc-vector.html
- via RSS
我们知道在javascript
以及Python 3.6+
中,所有的dict
都保留了插入顺序。但在
C++中,无论是std::map
还是std::unordered_map
,都没有保留插入顺序。当遍历时,std::map
得到的是一个根据键值排序的有序序列,而std::unordered_map
则基本是乱序。
loki::AssocArray
弥补了该特性,它有兼容std::map
的 API
,同时又确保了在begin()
到end()
循环时,保留了插入时的顺序。在这方面它和tsl::ordered_map
一样,只是效率没后者那么高,但胜在代码和内存布局简单清晰。
loki::AssocArray
的代码位于https://github.com/brkpt/loki/blob/master/include/loki/AssocVector.h,该文件没有其它依赖,可以直接复制使用。
其原理特别简单,就是一个std::vector<pair<K,
V>>
,连顺序都不排(可对照folly::sorted_vector_map
),直接按照添加顺序在尾部插入。只是添加了一些仿std::map
的 API。
也因为如此,只有新增数据很快,其余的操作,如修改、删除,甚至访问,都需要O(n)
的时间,基本只适合不到三位数的元素个数时使用。
Tips: Until now, everytime you want to store your article, we will help you store it in Filecoin network. In the future, you can store it in Filecoin network using your own filecoin.
Support author:
Author's Filecoin address:
Or you can use Likecoin to support author: