2010-12-30 5 views
6

Я пытаюсь реализовать вектор, подобный вектору < boost :: tuple < int, int, int >> day; Я хочу перенести первый элемент элемента, чтобы проверить условие. Может кто-нибудь скажет мне, как это сделать? Я новичок в повышении. Спасибо заранее.Доступ к элементам boost :: tuple

ответ

15
#include <boost/tuple/tuple.hpp> 
#include <iostream> 
#include <vector> 

int main() 
{ 
    std::vector< boost::tuple<int, int, int> > v; 
    v.push_back(boost::make_tuple(1, 2, 3)); 
    std::cout << boost::get<0>(v[0]) << std::endl; 
    std::cout << boost::get<1>(v[0]) << std::endl; 
    std::cout << boost::get<2>(v[0]) << std::endl; 
} 
+0

Если я не использую этот make_tuple(), смогу ли я использовать get <>() – Shweta

+1

@Shweta: yes, 'make_tuple' - это просто вспомогательная функция для создания кортежа. – Naveen

+0

ваш метод дает некоторые ошибки, может быть проблема с версией или что-то еще. Ошибка error: 'boost :: get <0>' не является членом 'boost :: tuples :: tuple ' – Shweta

5

Первый tupple имеет набор типов:
Редактировать (Исправлено сообщение) Но используя абстрактный тип здесь, чтобы продемонстрировать, как он работает лучше.

std::vector<boost::tuple<A, B, C> > day; 

// Load data into day; 

Теперь вы можете извлечь эти части кеппа, используя метод get.

A& aPart = day[0].get<0>(); 
B& bPart = day[0].get<1>(); 
C& cPart = day[0].get<2>(); 
+0

не должна быть 'получить <0>, получить <1>, получить <2>'? – Naveen

+0

Кто-нибудь видел сообщение об ошибке, которое генерируется при доступе к недопустимому индексу? Кроме того, отсутствие визуализатора для VS отключает меня. –

Смежные вопросы