2009-12-27 57 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'键。

如果你希望你的应用程序是基于索引的,但考虑使用不同的数据结构,如向量或链接列表。