CPP一个简单二分查找(查找元素是类对象)

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
/*
@@注意操作符与友元函数的使用!
@@name.c_str()//将string 转换成 const char*类型
*/
class Person
{
string name;
int age;
string addr;
int n ;
public:
Person(){}
Person(const char *n, int a, const char* ad) :name(n), age(a), addr(ad), n(0){ n++; }
~Person(){}
//小于
friend bool operator<(const Person &a, const Person &b)
{
//按照姓名比较
return a.name < b.name;
}
//相等
friend bool operator ==(const Person &a, const Person &b)
{
return a.name == b.name;
}
friend ostream &operator<<(ostream &Out, const Person&a)
{
Out << a.name << " ," << a.age << " ," << a.addr << endl;
return Out;
}
//getnum
int getnum()
{
return this->n;
}
//getname
string getname()
{
return this->name;
}

};
//查找
Person* binarysearch(Person *a, int n, string name)
{
if (n <= 0) return NULL;
int mid = n / 2;
Person t(name.c_str(), 0, "");//将string 转换成 const char*类型
if (a[mid] == t) return a + mid;//只比较name
if (t < a[mid]) return binarysearch(a, mid, name);//只比较name
return binarysearch(a + mid + 1, n - (mid + 1), name);
}
void main()
{


Person a[6] = { 
Person("王五", 22, "山东"),
Person("赵四", 33, "河南"), 
Person("张三", 44, "浙江") ,
Person("陈五2", 222, "山东"),
Person("徐四2", 332, "河南"),
Person("魏三2", 442, "浙江") };
for (int i = 0; i <6; i++)
{
for (int j = i + 1; j < 6; j++)
{
if (a[j] < a[i])
swap(a[j], a[i]);
}
}
for (int i = 0; i < 6; i++)
{
cout << a[i] << endl;
}
string name;
cout << "请出入名字:";
cin >> name;
Person *p = binarysearch(a, 6, name);
if (p!=NULL)
{
cout << *p << endl;
}
else
{
cout << "不存在!" << endl;
}
system("pause");


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值