2009-12-27 56 views
2

我創建了一個映射。 我想在地圖中使用itr將密鑰的索引打印到文件中。 這就是我的意思是:迭代器的值

map <string,int> VendorList; 
VendorList[abc] = 0; 
VendorList[mazda] = 111; 
VendorList[ford] = 222; 
VendorList[zoo] = 444; 
map <string,int>::iterator itr=VendorList.find("ford"); 
fstream textfile; 
textfile << itr; 

,如果我把在行查找ABC我希望程序來清點1.

,如果我把在發現馬自達行我希望程序來清點2。

,如果我把在行查找福特祝程序來清點3.

,如果我把在查找線動物園我希望程序來清點4.

如何我是否這樣做? 編譯器喊就行了:

textfile << itr; 

它給出了這樣的錯誤: 錯誤C2679:二進制「< <」:沒有操作員發現這需要類型的std :: _樹< _Traits的」右手操作> :: iterator'(或者沒有可接受的轉換)

+1

那是C++嗎?標記可能比'printing'或'value'更有用。另外,應該是'VendorList [「abc」]'?你是從'cout'讀的嗎? – Kobi

+1

在上面。索引是「Ford」/「abc」等。創建映射時,第一個類型(字符串)是索引的類型。放在方括號[]中的值是索引。 –

+0

也許編輯這個問題,讓它更清楚你的要求是什麼? – jlouzado

回答

3

在映射中,元素並不按照插入順序存儲,所以你必須自己保存「order」數據。

我建議你考慮使用對的向量而不是地圖。矢量確實按照插入順序存儲元素,其迭代器爲Random-Access,因此您可以使用operator-檢查位置。

vector <pair<string, int> >::iterator itr; 
// itr = the needed element 
cout << itr - VendorList.begin(); 
4

你的程序有很多錯誤。坦率地說,我不確定你的要求。 但不管怎麼說試試這個:

map <string,int> VendorList; 
VendorList["abc"] = 1; 
VendorList["mazda"] = 2; 
VendorList["ford"] = 3; 
VendorList["zoo"] = 4; 
map <string,int>::iterator itr=VendorList.find("ford"); 
cout<<(itr->second);// this will print 3 

編輯:
也正如有人曾建議使用雙矢量,我認爲他是對的。嘗試這樣的事情。

#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 
int main() 
{ 
    typedef vector<pair<string,int> > Vm; 
    Vm V; 
    V.push_back(make_pair("abc",0)); 
    V.push_back(make_pair("mazda",111)); 
    V.push_back(make_pair("ford",222)); 
    V.push_back(make_pair("zoo",444)); 

    for(size_t i=0;i!=V.size();++i) 
    if(V[i].first=="ford") 
     cout<<(i+1); 
} 

按照要求修改上述程序。
希望有所幫助。

0

因此,「索引」的概念並不適合Google地圖。

地圖只是鍵值對,您可以在其中存儲一個值(例如'111')並使用鍵(例如'mazda')訪問它。通過這種方式,你不需要索引來訪問'111',你可以使用'mazda'鍵。

如果你希望你的應用程序是基於索引的,但考慮使用不同的數據結構,如向量或鏈接列表。