使用向量c ++进行二分搜索
Posted
技术标签:
【中文标题】使用向量c ++进行二分搜索【英文标题】:Binary search with vector c++ 【发布时间】:2020-12-16 05:30:29 【问题描述】:我有一个结构,其中数据定义为:
typedef struct contacts
string name; //jhonathan , anderson , felicia
string nickName; //jhonny , andy , felic
string phoneNumber; // 13453514 ,148039 , 328490
string carrier; // atandt , coolmobiles , atandt
string address; // 1bcd , gfhs ,jhtd
contactDetails;
vector <contactDetails> proContactFile;
在这里我想对name
进行二进制搜索。如果搜索到的名称可用,那么我想显示该名称的相关联系方式(nickname,phone number ,carrier ,address
)。我该怎么做?
【问题讨论】:
为什么不使用关联容器,例如std::map<std::string, contactDetails>
?
【参考方案1】:
auto cmpFn = [](const contacts &c1, const contacts &c2) return c1.name < c2.name;;
// 1. vector must be sorted
std::sort(proContactFile.begin(), proContactFile.end(), cmpFn);
// 2. what to find
contacts findme; findme.name = "cat";
// 3. find
auto it = std::lower_bound(proContactFile.begin(), proContactFile.end(), findme, cmpFn);
bool found = it != proContactFile.end() && it->name == findme.name;
【讨论】:
是的,这是有效的。但这不是冒泡排序??我需要使用冒泡排序搜索名称以上是关于使用向量c ++进行二分搜索的主要内容,如果未能解决你的问题,请参考以下文章