您的位置:首页 > 职场人生

一个关于set的面试题

2017-09-26 21:14 323 查看
面试的时候经常会被问到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;
}
就是这么简单,很多时候不是不会,而是你没去看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c 算法 stl