C++-利用STL中的map做操作时总是不成功
自己写的一份代码,需要用到STL中的map容器(不用vector主要是需要保证容器中元素的唯一性),但是做插入操作和遍历时总是出现问题,编译都无法通过,代码如下:
#include <fstream>
#include <map>
using namespace std;
typedef map<double,pair<double ,double>> pair_map;
double N;
pair_map map_pair;
int main()
{
ifstream fin("frac1.in.txt");
ofstream fout("frac1.out.txt");
fin>>N;
map_pair.insert(pair_map::value_type(0,make_pair(0,1)));
map_pair.insert(pair_map::value_type(1,make_pair(1,1)));
for (double i=1;i<=N;i++)
{
for (double j=1;j<i;j++)
{
map_pair.insert(pair_map::value_type(j/i,make_pair(j,i)));
}
}
pair_map::iterator iter;
for (iter=map_pair.begin();iter!=map_pair.end();iter++)
{
pair<double,double> tmp=*iter;
fout<<tmp.first<<"/"<<tmp.second<<endl;
}
return 0;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题出在最后一个for循环里面,这一句代码:
pair<double,double> tmp=*iter;
你想想,这个数据类型pair<double,double>和map_pair里面的元素的类型是一样的吗?不是一样的,所以会出错,把这里修改一下应该就可以了的。
我修改了一下,这样应该就能够满足你的需求了:
#include <fstream>
#include <map>
using namespace std;
typedef map<double,pair<double ,double> > pair_map;
int N;
pair_map map_pair;
int main()
{
ifstream fin("frac1.in.txt");
ofstream fout("frac1.out.txt");
fin>>N;
map_pair.insert(pair_map::value_type(0,make_pair(0,1)));
map_pair.insert(pair_map::value_type(1,make_pair(1,1)));
for (double i=1;i<=N;i++)
{
for (double j=1;j<i;j++)
{
map_pair.insert(pair_map::value_type(j/i,make_pair(j,i)));
}
}
pair_map::iterator iter;
for (iter=map_pair.begin();iter!=map_pair.end();iter++)
{
//pair<double,double> tmp=*iter;
fout<<(*iter).second.first<<"/"<<(*iter).second.second<<endl;
}
return 0;
}
运行结果:
map 存的是 pair<double,pair<double,double>> 对象,它的迭代器iterator 返回的是一个pair<double,pair<double,double>>*
所以你要改成这样
pair<double,pair<double,double>> tmp=iter;
fout<<tmp.second.first<<"/"<<tmp.second.second<<endl;
或者
pair<double,double> tmp=(iter).second;
fout<<tmp.first<<"/"<<tmp.second<<endl;