• Log in
Anwen  Share and Create
  • Book
  • Movies
  • Music
  • SF
  • Goodlink
  • Asks
  • Eyeopen
  • Create

loki::AssocVector 保留插入顺序的关系型结构

Sharer: 阅微堂 September 9, 2019 at 10:00 pm
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)的时间,基本只适合不到三位数的元素个数时使用。

作者暂无likerid, 赞赏暂由本网站代持,当作者有likerid后会全部转账给作者(我们会尽力而为)。

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:
tags:编程 C++ 数据容器

0 0

2012-2018 Anwen All of our posts are default licensed under CC BY 4.0 About Help Changelog Telegram
Today Quote: 2006年,两名美国学生完成了一个名为“发送阳光”的项目。如果手机发现,你的朋友在天气不好的地方,而你在天气很好的地方,那么手机就会提示你,拍一张照片发送给朋友,让他们振作起来。后来,两人当中的 Mike Krieger 创建了 Instagram。 -- 《经济学人》