。 gccとVisual Studio(少なくとも)はこれらをサポートしています。したがって、可能な場合(つまり、サポートされているすべてのコンパイラが、既に非常に高いタプルをサポートしている場合)、これを使用することができます。
唯一の問題は、まだいくつかのコンパイラはstd :: tr1名前空間にタプルを持ち、他のコンパイラはstd名前空間にそれを持っていることです。また、時々あなたが含まれる必要があります。しかし、ビルドシステムを構成して、いくつかのスキームをサポートするのに役立つマクロを定義することができます。あなたは、たとえばだけのVisual Studio 10および/または非常に新しいgccのバージョンをサポートする必要がある場合には行うことができ、以下:
#include <list>
#include <string>
#include <tuple>
std::list<std::tuple<int, string> > time;
はcmakeの持つたとえば、あなたはすべてのためにサポートしますヘッダファイルを生成することができコンパイラはタプルをサポートしています。以下のようになります。上記の例は以下の、
#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ < 430)
# define GCC_OLDER_THAN_430 1
#endif
#if defined(_MSC_VER) && (_MSC_VER < 1600 /* 2010 */)
# define MSC_OLDER_THAN_2010 1
#endif
#if defined(GCC_OLDER_THAN_430)
# define TR1_IN_TR1_SUBDIRECTORY 1
#endif
#if defined(ZORBA_GCC_OLDER_THAN_430) || defined(ZORBA_MSC_OLDER_THAN_2010)
# define TR1_NS_IS_STD_TR1 1
#endif
#ifdef TR1_NS_IS_STD_TR1
# define TR1_NS std::tr1
#else
# define TR1_NS std
#endif
#ifdef TR1_IN_TR1_SUBDIRECTORY
# include <tr1/tuple>
#else
# include <tuple>
#endif
その後:
は
#include <string>
#include <list>
#include "tuple.h"
std::list<TR1_NS::tuple<int, std::string> > time;
これは、ほぼすべての動作するはず
これを行うには、tuple.h.cmakeファイルのようなものを作成します最近のコンパイラ
ダム質問:namespace std/using namespace boostを使って追加することを覚えましたか?どのようなエラーメッセージが表示されますか? – Mikola
"名前空間の使用を増やす"がありますか?あなたのコードで?私はあなたが "名前空間stdを使う"必要があると思います。同じように。 –
私はその目的のためにstd :: mapを使うことができると思います。自動的に 'int'値でソートされた' int-string'のペアを保持します。 [Here](http://www.cplusplus.com/reference/stl/map/)は説明です。 –
beduin