Cũng giống như một lưu ý phụ:
Chuẩn C++ mới giới thiệu các mẫu biến thể và với các bộ dữ liệu đó. gcc và Visual Studio (ít nhất) hỗ trợ chúng. Vì vậy, nếu có thể cho bạn (tức là nếu tất cả các trình biên dịch được hỗ trợ hỗ trợ bộ dữ liệu đã rất có khả năng), bạn có thể sử dụng nó.
Vấn đề duy nhất là, một số trình biên dịch vẫn có tuple trong không gian tên std :: tr1 và những người khác đã có nó trong không gian tên std. Đôi khi bạn cần phải bao gồm và đôi khi. Nhưng bạn có thể cấu hình hệ thống xây dựng của bạn để xác định một số macro giúp bạn hỗ trợ một số lược đồ. Nếu bạn, ví dụ chỉ cần hỗ trợ Visual Studio 10 và/hoặc một phiên bản gcc khá mới, bạn có thể làm như sau:
#include <list>
#include <string>
#include <tuple>
std::list<std::tuple<int, string> > time;
Ví dụ với cmake bạn có thể tạo một tập tin tiêu đề, mà mang đến cho bạn hỗ trợ cho tất cả các trình biên dịch, hỗ trợ các bộ dữ liệu (và với nhiều công việc hơn nữa thậm chí sử dụng tăng như là một sự sụp đổ trở lại).
Để làm điều này, bạn sẽ tạo ra một cái gì đó giống như một tập tin tuple.h.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
Sau đó, ví dụ trên sẽ trông giống như sau:
#include <string>
#include <list>
#include "tuple.h"
std::list<TR1_NS::tuple<int, std::string> > time;
này nên hoạt động trên hầu hết tất cả các trình biên dịch gần đây.
Nguồn
2011-06-26 06:03:38
Câu hỏi ngớ ngẩn: Bạn có nhớ thêm bằng cách sử dụng tăng không gian tên không gian tên/sử dụng không gian tên không? Các thông báo lỗi cụ thể mà bạn đang nhận được là gì? – Mikola
Bạn có "tăng không gian tên sử dụng không"; trong mã của bạn? Tôi đoán bạn cần một "using namespace std;" cũng. –
Tôi nghĩ rằng, bạn có thể sử dụng std :: map cho mục đích đó. Nó sẽ giữ cặp 'int-string', tự động được sắp xếp theo giá trị' int'. [Ở đây] (http://www.cplusplus.com/reference/stl/map/) là mô tả. –
beduin