Mit c++11 unordered_map Typen auf mac os x
Bin ich auf MAC OS X 10.8.4 installiert haben und gcc durch das herunterladen von XCode und die command line tools-Paket. Hier ist mein 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)
Ich versuche, die neue unordered_map aus der tr1-namespace:
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;
}
Aber die Linie, wo ich bin Zugriff auf das map-element mit at
nicht kompilieren. Ich bin immer der folgende Fehler:
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'
Ich verstehe nicht ganz, dieses, da die C++ - Referenz enthält eine Funktion namens at
um den Zugriff auf die einzelnen Elemente der Karte. Ich habe versucht, einen Blick in die header-Dateien, die die map-Erklärung (auf meinem system ist es auf /usr/include/c++/4.2.1/tr1/unordered_map
) und überraschend genug, es nicht enthalten ein Element mit dem Namen at
.
Ich verstehe, dass ältere Compiler möglicherweise nicht die Unterstützung der neuen c++11-Bibliotheken in der std
namespace, aber ich habe in der Lage gewesen, einige der anderen neuen Bibliotheken von tr1
namespace. In der Tat, ich kann andere Funktionen nutzen der unordered_map
wie find
, insert
etc. Nur das Mitglied at
fehlt.
Wie kann ich diese zusammengestellt? Sollte ich ein upgrade auf eine neuere compiler? Ich sehe nicht ein, den neuen Compiler für mac os x leicht. Sollte ich bauen es von Grund auf neu?
InformationsquelleAutor Venkat | 2013-08-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre gcc-version ist zu niedrig. Außerdem, vielleicht solltest du installieren clang statt, seit Apple ist die Kraft dahinter.
Wenn Sie ein Upgrade auf die neueste version, sollten Sie nicht verwenden
tr1
mehr.tr1
ist der Entwurf für C++11 und ist veraltet jetzt.InformationsquelleAutor Siyuan Ren
1)
unordered_map
ist eine form dermap
containter, verwenden Sieunordered_map::find(KeyType key)
stattdessen gibtunordered_map::iterator
im wesentlichen Zeiger aufstd::pair< KeyType, ValueType >
.Oder verwenden Sie
unordered_map::operator[](KeyType key)
um Zugriff auf ein element hingewiesen, die durch diekey
variable. Beachten Sie, dass Sie es schaffen wird, das neue element, falls es noch nicht existiert.Sehen cppreference.com für mehr info.
2) mit neueren GCC (mindestens 4.7) mit
-std=c++11
option, und Sie erhalten standardisiertestd::unordered_map
statttr1::unordered_map
InformationsquelleAutor Erbureth