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里面的东西
编译能通过,答案不对 展开
#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里面的东西
编译能通过,答案不对 展开
2个回答
展开全部
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的问题我也不是很清楚
//为什么这句换成 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的问题我也不是很清楚
追问
改了,也不行,大哥你能帮我调试下么
展开全部
看你的代码,唯一感觉可能错的地方是,最后一句cout
iter->second 的类型是 std::string。 貌似 cout 没有重载 const std::string & 的 operator << 版本。
修改方法是,将
iter->second
改成
iter->second.c_str()
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里面的东西了,麻烦大神说清楚点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询