迭代器的值

时间:2009-12-27 07:47:36

标签: c++ stl iterator

我创建了一张地图。 我想在地图中使用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,我希望程序能够使用cout 1。

如果我放入查找行马自达,我希望程序能够进行2。

如果我将查找行放入福特,我希望程序能够使用cout 3。

如果我放入查找行动物园,我希望程序能够进行4。

我该怎么做? 编译器大喊:

 textfile << itr;

它给出了这个错误: 错误C2679:二进制'&lt;&lt;' :没有找到哪个运算符采用'std :: _ Tree&lt; _Traits&gt; :: iterator'类型的右手操作数(或者没有可接受的转换)

3 个答案:

答案 0 :(得分: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);
}

根据要求修改上述程序 希望有所帮助。

答案 1 :(得分:3)

在地图中,元素不按插入顺序存储,因此您必须自己保存“订单”数据。

我建议你考虑使用对矢量而不是地图。 Vector会按插入顺序存储元素,其迭代器为Random-Access,因此您可以使用operator-检查位置。

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

答案 2 :(得分:0)

因此,'index'的概念并不适合地图。

地图只是键值对,您可以在其中存储值(例如,“111”)并使用键(例如“mazda”)访问它。这样你就不需要索引来访问'111',你可以使用密钥'mazda'。

如果您 希望您的应用程序基于索引,请考虑使用其他数据结构,如Vector或链接列表。