一个对标 C++ STL 的 JS 库

585 阅读2分钟

您是否还在为 JS 中没有标准的数据结构库而烦恼?

您是否想要在 JS 中拥有一个像 C++ STL 那样拥有各种标准数据结构的 package?

现在,它来了

js-sdsl,一个以 C++ STL 为基准实现的 JS 库

js-sdsl

github 项目地址:github.com/ZLY201/js-s…

包含的数据结构

  • Vector
  • Stack
  • Queue
  • LinkList
  • Deque
  • PriorityQueue
  • Set (using RBTree)
  • Map (using RBTree)
  • HashSet (for reference only)
  • HashMap (for reference only)

支持的平台

  • node.js (using commonjs)
  • react/vue (using es5)
  • browser (support most browsers including IE8+)

下载

直接下载

或者使用 npm

npm install js-sdsl

使用

为了帮助您使用,我们提供了完整的 API 文档

在浏览器中使用

<!-- you can download the file locally and import it or import it dynamically by using url. -->
<script src="https://zly201.github.io/js-sdsl/js-sdsl.min.js"></script>
<script>
    const { Vector } = sdsl;
    const myVector = new Vector();
    // your code here...
</script>

其他

就像其他的 package 一样,查看 src/test.ts 可能会有所帮助

从源码构建

你可以 pull 这个存储库并运行 yarn build 来重建这个库

测试

在发布之前,我们对每个功能都进行了严格的单元测试,您可以查看 testResult.txt 找到我们的测试结果或运行 yarn test 来重现它

许可证

MIT licensed

注意

请注意,我们的正式版本是从 2.0.0 开始的。为避免不必要的麻烦,下载时请选择最新版本(>=2.0.0)

不幸的是,我尽力提高哈希表的性能但失败了。理想情况下,哈希表应该是 O(1),在我的项目中,当每个 bucket 的大小为 1 时,它的时间比 Set 和 Map 要长得多

经过分析,我发现当大小为 10610^{6} 时,操作符 new 的开销接近 2s,这似乎是 JS 语言的瓶颈

您可以尝试下面的代码来验证我的说法

console.time("run");
const arr = new Array(1000000);
arr[100000] = new Array();
console.timeEnd("run");

你可以想象当我多次重复上述操作时会发生什么

如果你想在 JS 中使用 hash 容器,请在 ES6 中使用 set 或 map

官方的 Set 和 Map 是使用哈希表而不是 RBTree 来实现的

关于 JS 哈希表的更多信息,请参考 stackoverflow.com/questions/3…