使用 C++0x 的 unordered_map
我正在使用 unordered_map
,它包含为: #include
程序编译如下: g++ Test.cc -std=gnu++0x -o 测试
我使用的是TR1 的unordered_map
还是C++0x 的unordered_map
。或者两者是一样的吗?
I am using an unordered_map
which is included as:#include <unordered_map>
and the program is compiled as follows:g++ Test.cc -std=gnu++0x -o test
Am I using the unordered_map
of TR1 or that of C++0x. Or is it both the same?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我相信 gcc 将其 TR1 标头放入
中,因此您应该获得 C++11 版本。但它们非常相似。I believe gcc puts their TR1 headers in
<tr1/unordered_map>
, so you should be getting the C++11 version. But they are very similar.GCC 在 tr1 子目录中有 tr1 头文件。另外还有 tr1 命名空间。
因此,除非您专门做了这些事情或做了类似的“使用”,否则您已经得到了标准的。
这些实现是分开的,但它们非常相似。存在足够多的差异(初始化列表、比较操作),使得维护一个包含所有条件和宏的文件变得很痛苦。
GCC has tr1 headers in tr1 subdirectory. Plus there is the tr1 namespace.
So unless you specifically did these things or did a similar "using" you've got the std ones.
The implementations are split but they are rather similar. There were just enough differences (initializer_list, comparison ops) to make maintenance of one file with all the conditionals and macros a pain.
这在很大程度上取决于特定的编译器版本。例如,GCC 4.4 基本上只是为您的
-std=c++0x
选项提供了一些宏开关,以适当地进行名称空间标记,但最终总是会从tr1_impl/ 中提取实际代码unordered_map
,而 GCC 4.6 有两种完全独立的实现,一种在tr1/unordered_map.h
中,另一种在bits/unordered_map.h
中-- 并且.../hashtable.h
中各自的基类实现实际上有所不同; C++0x 版本到处都有std::forward
等。简短的回答:这取决于情况。
This depends very much on the particular compiler version. For instance, GCC 4.4 basically just had some macro switches for your
-std=c++0x
option to do the namespace labelling appropriately, but would always end up pulling the actual code fromtr1_impl/unordered_map
, while GCC 4.6 has two entirely separate implementations, one intr1/unordered_map.h
and one inbits/unordered_map.h
-- and the respective base class implementations in.../hashtable.h
do in fact differ; the C++0x version hasstd::forward
s everywhere etc.Short answer: It depends.