C++-利用STL中的map做操作时总是不成功

发布于 2016-12-02 09:02:16 字数 1045 浏览 1350 评论 2

自己写的一份代码,需要用到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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

偏爱自由 2017-04-19 04:57:06

问题出在最后一个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;
}

运行结果:

想挽留 2016-12-08 18:37:17

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;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文