私は MAC OS X 10.8.4 を使用しており、XCode とコマンド ライン ツール パッケージをダウンロードして gcc をインストールしました。ここに私のgccがあります:
Using built-in specs.
Target: i686-apple-darwin11
Configured with: /private/var/tmp/llvmgcc42/llvmgcc42-2336.11~182/src/configure --disable-checking --enable-werror --prefix=/Applications/Xcode.app/Contents/Developer/usr/llvm-gcc-4.2 --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-prefix=llvm- --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/ --with-slibdir=/usr/lib --build=i686-apple-darwin11 --enable-llvm=/private/var/tmp/llvmgcc42/llvmgcc42-2336.11~182/dst-llvmCore/Developer/usr/local --program-prefix=i686-apple-darwin11- --host=x86_64-apple-darwin11 --target=i686-apple-darwin11 --with-gxx-include-dir=/usr/include/c++/4.2.1
Thread model: posix
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
tr1 名前空間の新しい unordered_map を使用しようとしています。
using namespace std;
#include <tr1/unordered_map>
template<class T>
class A
{
tr1::unordered_map<T, int> * mymap;
.....
// key is of type T and value is of type int
mymap->at(key) = value;
}
ただし、使用してマップ要素にアクセスしている行at
はコンパイルされていません。次のエラーが表示されます。
error: 'class std::tr1::unordered_map<int, int, std::tr1::hash<int>, std::equal_to<int>, std::allocator<std::pair<const int, int> >, false>' has no member named 'at'
at
C++ リファレンスには、マップの個々の要素にアクセスするために呼び出される関数が含まれているため、これはよくわかりません。マップ宣言を含むヘッダー ファイル (私のシステムでは/usr/include/c++/4.2.1/tr1/unordered_map
) を調べようとしましたが、驚くべきことに、 という名前のメンバーが含まれていませんat
。
古いコンパイラが名前空間で新しい c++11 ライブラリをサポートしていない可能性があることは理解していますが、std
名前空間の他の新しいライブラリのいくつかを使用できましたtr1
。実際、 などの他の機能を使用できます。unordered_map
メンバーのみが欠落しています。find
insert
at
これをコンパイルするにはどうすればよいですか?新しいコンパイラにアップグレードする必要がありますか? mac os x 用の新しいコンパイラがすぐに利用できるようには見えません。ゼロから構築する必要がありますか?