您的位置:首页 > 大数据 > 人工智能

poj2002 STL pair解法

2014-11-21 10:42 435 查看
#include<iostream>
#include<algorithm>
using namespace std;

//**************常量****************//
const int MAX=1001;
int N;
//*************算法变量************//
pair<int,int> point[MAX];
int main()
{
int l,ax,ay,bx,by,dx,dy,count=0;
pair<int,int> temp1;
pair<int,int> temp2;
while(~scanf("%d",&N)&&N)
{
//输入结点
for(int i=1;i<=N;i++)
{
scanf("%d%d",&point[i].first,&point[i].second);
}
//排序
sort(point+1,point+N+1);//
count=0;
for(int i=1;i<=N;i++)
{
for(int j=i+1;j<=N;j++)
{
if(point[j].second==point[i].second)
{
l=point[i].first-point[j].first;
ax=point[j].first;
by=ay=point[j].second-l;
bx=point[i].first;
temp1.first=ax;
temp1.second=ay;
temp2.first=bx;
temp2.second=by;
if(binary_search(point+1,point+N+1,temp1)&&binary_search(point+1,point+N+1,temp2)) count++;
}
else if(point[i].second>point[j].second)
{
dx=point[i].first-point[j].first;
dy=point[i].second-point[j].second;
ax=point[j].first+dy;
ay=point[j].second-dx;
bx=point[i].first+dy;
by=point[i].second-dx;
temp1.first=ax;
temp1.second=ay;
temp2.first=bx;
temp2.second=by;
if(binary_search(point+1,point+N+1,temp1)&&binary_search(point+1,point+N+1,temp2)) count++;
}
}
}
printf("%d\n",count);
}
return 0;
}

Pair模版是C++ STL中短小精干的结构体,map和multimap都利用了很多pair对组模版,即<键/值>为成对元素,另外函数需要返回两个值的时候,也常用pair模版(当然,结构体也一样方便)。

pair数据结构:

Pair的定义:

std::pair<int,std::string> p(3,“yaoyao”);(C++ 所有标准都是定义在std名称空间中的)
这样一来可以通过p.first访问3,p.second访问”yaoyao”。

Pair的比较:

两个pair类型的变量也可以进行比较大小,但是他们的比较具有优先性,也就是当first与first比较,如果可以比较出结果时,就停止比较,以first比较结果为准,否则才进行second的比较。

例:std::pair<int,std::string> p1(5,”abc”),p2(4.”abc”),p3(5.”abb”);

比较可知 p1>p2 p1<p3 p2<p3.

当且仅当first与second都相等时,他们才相等。

当且仅当first与second都相等时,他们才相等。

便捷函数make_pair():该函数也可以进行两个成员的代替,好处是不需要指明成员变量类型。使用起来更方便快捷。

例:

用pair表示: std::pair<int,std::string> p(5,”yaoyao”); 将p插入到容器中insert(p);

用make_pair: insert ( make_pair(5,”yaoyao”) );

通过比较可以看到使用make_pair不需要中间变量和类型说明,比较方便。

当然也不是以后都使用make_pair,有些地方需要确切的指明类型,例如对于float的3.14,make_pair会把它当成double处理。所以某些情况下也会带来一定的麻烦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: