哪些 C++ 库提供了尽可能与 java.util.* 提供的数据结构 API 相匹配的数据结构 API。 具体来说,我正在寻找以下 DS 和以下实用功能:-
**DS**: Priority Queue, HashMap, TreeMap, HashSet,
TreeSet, ArrayList, String most importantly.
**Utility**: Arrays.* , Collections.*, Regex, FileHandling etc.
and other converters and algorithms like Binary Search, Sort, NthElement etc.
我的猜测是,Boost 可能能够做到所有这些,但我发现它太大了,并且将其添加到项目中并不简单,特别是当我想快速开始某件事并且虽然代码需要所有这些数据结构,总体代码不会那么庞大,需要花费大量精力来设置库。
一个例子是,如果有人必须编写 C++ 程序来完成学校作业的网络流算法。我确信我可以想出更好的例子,但这个例子在我的脑海中。
谢谢 阿杰
最佳答案
所有这些容器都可以在 SC++L 中以某种形式使用:
优先队列
std::priority_queue (这实际上是一个容器适配器,而不是容器本身 - 也就是说,它在另一个容器“之上”工作,通常是std::vector
或std::deque
。HashMap
std::unordered_map (或者,如果您的编译器不支持 C++0x,则可以使用boost::unordered_map
)树形图
std::mapHashSet
和TreeSet
与HashMap
和TreeMap
基本相同,只不过键和值是一样。不过,还有std::unordered_set
和std::set
。ArrayList
是令人尊敬的std::vectorString
是可敬的 std::string 。您在 JavaString
类中获得的许多函数都可以在 Boost.Strings 中找到。图书馆。
不要害怕设置提升。根据我的经验,您设置一次,然后在所有项目中一遍又一遍地使用它。另外,我上面提到的所有库都是仅 header 库。这意味着,您实际上不需要构建/安装任何库,只需引用 header 即可。
对于其他事情,我不太确定,因为我不太了解 Java。归根结底,您不会找到一个“就像 Java 一样,但用 C++ 编写的”库,因为那毫无意义。编写 C++ 库是为了发挥 C++ 的优势,编写 Java 库是为了发挥 Java 的优势。尝试将专为一种语言设计的库硬塞到另一种语言中对我来说没有意义。
关于C++ 数据结构 API 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3392598/