C++关于STL里的map问题,求大神!!! 10

#include"stdafx.h"#include<iostream>#include<stdlib.h>#include<map>usingnamespacestd;... #include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include<map>
using namespace std;

class line
{
public:

double x, y, x1, y1;

line()
{}

void setpos(double x, double y, double x1, double y1)
{

this->x = x;
this->y = y;
this->x1 = x1;
this->y1 = y1;
}

};

int _tmain(int argc, _TCHAR* argv[])
{

int n;
cout << "请输入n个坐标 " << endl;
cin >> n;
line*L = new line[n];
for (int i = 0; i < n; i++)
{
double a, b, c, d;
cin >> a >> b >> c >> d;
L[i].setpos(a, b, c, d);

}

int j = 0;
multimap<int ,line*>Map;
for (int i = 0; i < n; i++)
{

Map.insert(pair<int ,line*>(i,&L[i]));
}

map<int, line*>::iterator I;
map<int ,line*>::iterator it;
it = Map.begin();
int sum = 0;

if (it->second->x == it->second->x1)cout << "xixixxiixixiix" << endl;// 这句就能执行里面的东西

for (; it != Map.end(); it++)
{

for (I = ++it; I != Map.end(); I++)
{

if (!(it->second->x)>(it->second->x1) || (it->second->x)<(it->second->x1))//为什么这句换成 if(it- >second->x == it->second->x1) //就不能执行if里面的东西
{

if ((I->second->x1 - I->second->x) == 0)
continue;
if ((I->second->y1 - I->second->y) / (I->second->x1 - I->second->x) == 0)
{

sum++;
continue;
}

if (I == Map.end())
break;
}

else //而且这个else就算不符合上面的if,也不会执行这个else里面的东西
{

double a = (it->second->y1 - it->second->y) / (it->second->x1 - it->second->x);

if ((I->second->x1 - I->second->x == 0) && (a == 0))
{

sum++;
continue;
}

double b = (I->second->y1 - I->second->y) / (I->second->x1 - I->second->x);

if (a*b == (-1))
sum++;

}

}
}

cout << "相互垂直的条数为" << sum << endl;

system("pause");
return 0;

}

if (it->second->x == it->second->x1)cout << "xixixxiixixiix" << endl;// 这句就能能执行里面的东西
if (!(it->second->x)>(it->second->x1) || (it->second->x)<(it->second->x1))//为什么这句换成 //if(it- >second->x == it->second->x1) //能不能执行if里面的东西了
*/是关于图里面的符号重载问题吗

else //而且这个else就算不符合上面的if,也不会执行这个else里面的东西
编译能通过,答案不对
展开
 我来答
panhezhong
2014-08-15 · TA获得超过622个赞
知道答主
回答量:155
采纳率:0%
帮助的人:88.5万
展开全部
if (!(it->second->x)>(it->second->x1) || (it->second->x)<(it->second->x1))
//为什么这句换成 if(it->second->x == it->second->x1)就不能执行if里面的东西

这个。。。
原句:!(it->second->x) > (it->second->x1) || (it->second->x) < (it->second->x1)
貌似!的优先级大于>的优先级
所以会先判断!(it->second->x),得到值为0或1之后才会进行大于判断
这是一个问题
至于那个else的问题我也不是很清楚
追问
改了,也不行,大哥你能帮我调试下么
轩嗨TA0206
2014-08-15 · TA获得超过136个赞
知道答主
回答量:112
采纳率:66%
帮助的人:108万
展开全部
看你的代码,唯一感觉可能错的地方是,最后一句cout

iter->second 的类型是 std::string。 貌似 cout 没有重载 const std::string & 的 operator << 版本。

修改方法是,将
iter->second
改成
iter->second.c_str()
追问
iter->second的类型不是一个对象么。
if (!(it->second->x)>(it->second->x1) || (it->second->x)second->x1))//为什么这句换成 //if(it- >second->x == it->second->x1) //就不能执行if里面的东西了,麻烦大神说清楚点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式