2013-10-12 23 views
-1

我有一個嵌套的模板參數,形式爲C++向量的鏈表

vector<list<int, string> >

也就是說,它是保持整數值和串詞鏈表的載體。如果這不是一個有效的表單,請讓我知道。我的問題是在調用它。如果'table'是上述數據類型,那麼將索引作爲例如table [0]調用是否可以?如果是這樣,我該如何開始瀏覽該索引中的鏈表?

+2

你如何開始走路鏈表如果*不*在一個載體?這樣做,但對於'table [n]'的鏈表。還請注意:您的'列表'無效。假設這是你正在使用的'std :: list'沒有這種類型。我想你的意思'的std ::向量<性病::名單>' – WhozCraig

+0

表[0]將只是你的第一個列表,然後你走過它,你會通過任何其他名單做。雖然你的意思可能是'list >' – Ashalynd

+0

請發表你已經試過的例子代碼。 – kfsone

回答

0

隨着您已經定義了嵌套的數據結構,你是完全正確的調用索引像你所說,table[0]。您可以完全執行您的列表操作。爲了使你的代碼更乾淨,它可以幫助做一些事情,如:

list<string> listInVector = table[i]; 

所以你不要混淆在table上的索引進行操作,而是可以使用該標識使代碼更乾淨。

+0

鑑於複製容器往往是相當昂貴的,我猜you'd真的想用'的std ::列表&listInVector = ...'或'const'限定版上。 –

0

在容器中的元素是單獨的元件。如果你想有多個元素,例如,intstd::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;