我感兴趣的是有一些通用的包含文件:
根据您运行它的平台包含unordered_map和unordered_set所需的所有文件。
根据我使用的平台,为正确的命名空间执行“using namespace”。
这些包含文件有这么多混乱,我不知道是否应该使用tr1 / unordered_set,unordered_set,ext / ...等。
我也不知道我应该使用什么命名空间,gnu_cxx,std :: tr1,std。是否有一些包含文件的#ifdef是正确的?
另外,如果我想为某些类型T定义一个哈希值,我该如何定义它以便它再次跨平台工作?现在我正在使用
namespace std {
namespace tr1 {
// define hash<T>
}
}
但这听起来不太合适。
(C ++和STL包含文件很乱!)
编辑:
我很高兴使用C ++标准库而不是STL(我不知道存在差异,这是混淆的另一个来源。)
现在,例如,我正在使用#include和clang ++:
Apple clang 3.0版(标签/ Apple / clang-211.12)(基于LLVM 3.0svn) 目标:x86_64-apple-darwin11.4.2 线程模型:posix
如果我执行#include [unordered_set],它将找不到包含文件。
我添加了标志-std = c ++ 0x(-std = c ++ 11不起作用)。
如果我使用#include [tr1 / unordered_map],那么它会找到包含文件,但我想要的东西只包括所有基础,并从正确的位置选择包含文件,而不是让我从std更改所有内容: :...到std :: tr1 :: ...
另外,回到我的问题,现在我正在使用
typedef unordered_set<T> generic_set;
在某个模板类中,它在std :: tr1中查找哈希值。克服它的唯一方法是在不同的名称空间中提供所有散列键函数等的完整规范吗?我喜欢
的简单性 unordered_set<T>
无需指定所有哈希函数等等。