2013-10-12 5 views
-1

У меня есть аргумент вложенного шаблона в формеC++ Вектор связанных списков

vector<list<int, string> >.

То есть, это вектор связанных списков, содержащих целые значения и строковые слова. Если это не действительная форма, сообщите мне. Мой вопрос в том, чтобы позвонить ему. Если «таблица» относится к указанному выше типу данных, было бы нормально вызывать индекс как, например, таблицу [0]? Если да, то как мне перейти через связанный список в этом индексе?

+2

Как начать ходить связанный список, если его * не * в векторе? Сделайте это, но для связанного списка на 'table [n]'. Также обратите внимание: ваш 'list ' недействителен. такого типа для 'std :: list' не существует, предполагая, что это то, что вы используете. Я думаю, вы имеете в виду 'std :: vector >' – WhozCraig

+0

Таблица [0] будет вашим первым списком, а затем вы пройдете через нее, как и через любой другой список. Хотя вы, вероятно, имели в виду 'list >' – Ashalynd

+0

Пожалуйста, отправьте пример кода того, что вы уже пробовали. – kfsone

ответ

0

С вложенной структурой данных, которую вы определили, вы точно правильно называете индекс, как вы упомянули, table[0]. Вы можете точно выполнять свои операции с списком. Для того, чтобы сделать код более чистым, это может быть полезно, чтобы сделать что-то вроде:

list<string> listInVector = table[i]; 

Так что вам не запутаться выполнения операций по индексу в table, вместо этого вы можете использовать этот идентификатор, чтобы сделать код более чистым ,

+0

Учитывая, что копирование контейнеров имеет тенденцию быть довольно дорогостоящим, я бы предположил, что вы действительно хотите использовать 'std :: list & listInVector = ...' или соответствующую версию 'const'. –

0

Элементы в контейнерах представляют собой отдельные элементы. Если вы хотите иметь несколько элементов, например, int и std::string вам нужно поместить их в соответствующую структуру, например, в std::pair<int, std::string>:

std::vector<std::list<std::pair<int, std::string>>> table; 

Ходить элементы в списке на конкретный позиции, которую вы могли бы использовать, например:

std::list<std::pair<int, std::strin>>::iterator it(table[i].begin()), end(table[i].end()); 
for (; it != end; ++it) { 
    std::cout << "int=" << it->first << " string=" << it->second << "\n"; 
} 
0

«Если это не является допустимым формой, пожалуйста, дайте мне знать»

Да его не действует, я думаю, что вы имели в виду: -

std::vector< std::list<std::pair<std::string, int> > > table ;

Как получить доступ?

Что-то вроде: -

typedef std::pair<std::string , int> ele; 
std::list<ele>::iterator it = table[i].begin(); //for ith table 

for(;it!=table[i].end();++it) 
std::cout<<it->first<<" "<<it->second; 
Смежные вопросы