我创建了一张地图。 我想在地图中使用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'类型的右手操作数(或者没有可接受的转换)
答案 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或链接列表。