一个关于set的面试题

来源:互联网 发布:java防止api重复提交 编辑:程序博客网 时间:2024/06/03 23:51
面试的时候经常会被问到stl,stl中最常问的就是vector,map还有set。如果面试官问你的是基础的问题这些还好回到,但是要是问你一些需要思考的问题呢?(面试官也要找存在感的,要是问的太浅,你都会还怎么混,哈哈)

下面来说一下一个关于set的问题。

面试官:set的底层是用什么实现的?
面试者:二叉树。。。。。
面试官:(内心独白:这个都不知掉……)。有一个结构体,里面有两个字符串,如何在一个set中查找这个结构体?
面试者:...........(内心独白:我平时做的都是int、long long,string 啊,哪里有结构体)。这个还真不知道。

其实这个问题也是很简单的,对于复杂的数据结构,stl中提供了自定义的方法进行处理,下面就以结构体为例,实现set的插入和查找。
#include <iostream>#include <set>#include <iterator>using namespace std;struct TSimInfo{char szbegin[32];char szend[32];TSimInfo(){memset(this,0x0,sizeof(TSimInfo));}bool operator==(const TSimInfo &stSiminfo) const{if(strcmp(this->szbegin,stSiminfo.szbegin)<=0 && strcmp(this->szend,stSiminfo.szend)>=0){return true;}else {return false;}}};class compoper{public :bool operator() (const TSimInfo &left,const TSimInfo &right) const {if(strcmp(left.szbegin,right.szbegin)>=0){return true;}else if(strcmp(left.szend,right.szend)>=0){return true;}else {return false;}}};int main(int argc, char *argv[]) {TSimInfo stTest;strcpy(stTest.szbegin,"222222222");strcpy(stTest.szend,"333333333");if(strcmp(stTest.szbegin,stTest.szend)>0){cout<<"输入参数错误"<<endl;return 0;}set<TSimInfo,compoper> setV;TSimInfo tmp;strcpy(tmp.szbegin,"1111111");strcpy(tmp.szend, "5555555");setV.insert(tmp);strcpy(tmp.szbegin,"666666666");strcpy(tmp.szend, "8888888888");setV.insert(tmp);if(std::find(setV.begin(),setV.end(),stTest)==setV.end()){cout<<"no"<<endl;}else {cout<<"ok"<<endl;}return 0;}
就是这么简单,很多时候不是不会,而是你没去看。
原创粉丝点击