Согласно документации boost :: tuple , доступ к одному элементу кортежа имеет такую же производительность, как и доступ к переменной-члену. Например, учитывая следующее объявление:
tuple t1(A(), B(), C());
struct T { A a; B b; C c; }
T t2;
Эти два оператора должны иметь равную (или с незначительной разницей) производительность:
t1.get<2>();
t2.c;
Я изучил источники boost :: tuple и, если я правильно их понял (я не уверен, Я сделал), функция get
фактически выполняет следующее действие:
C get<2>(tuple& t)
{
return t.tail.tail.head;
//Generally: return t.tail. <> .head;
}
Это больше похоже на поиск в связанном списке, чем на прямой доступ, и, насколько я понимаю, имеет Сложность O (N) вместо O (1), которая ожидается от доступа к члену. Судя по моему прошлому опыту работы с Boost, я ошибся; но в чем моя ошибка? Как получить
действительно работает?