一个关于set的面试题
2017-09-26 21:14
323 查看
面试的时候经常会被问到stl,stl中最常问的就是vector,map还有set。如果面试官问你的是基础的问题这些还好回到,但是要是问你一些需要思考的问题呢?(面试官也要找存在感的,要是问的太浅,你都会还怎么混,哈哈)
下面来说一下一个关于set的问题。
面试官:set的底层是用什么实现的?
面试者:二叉树。。。。。
面试官:(内心独白:这个都不知掉……)。有一个结构体,里面有两个字符串,如何在一个set中查找这个结构体?
面试者:...........(内心独白:我平时做的都是int、long long,string 啊,哪里有结构体)。这个还真不知道。
其实这个问题也是很简单的,对于复杂的数据结构,stl中提供了自定义的方法进行处理,下面就以结构体为例,实现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; }就是这么简单,很多时候不是不会,而是你没去看。
相关文章推荐
- 一个关于malloc的面试题
- 一个微软面试题--关于位结构体
- 关于数组与指针的一个面试题
- Python面试题 之 Uniquify a list 不使用set去除一个列表中的重复项,并且保持原有的排列顺序
- 一个微软面试题--关于位结构体
- 关于unsiged char 的一个面试题
- 关于《一个fork的面试题》
- 一个blog,关于java方面的面试题
- 一个关于finally和return的面试题
- 一个关于java线程的面试题
- [lwn] A nasty file corruption bug - fixed (关于Linus解决的一个set_page_dirty很隐蔽的bug)
- 关于autoreleasepool一个常见的面试题
- [导入]关于阶乘的两个常见算法及一个相关面试题
- 关于三色球的一个排序程序(面试题)
- 一个关于dom操作属性的面试题
- 一个微软面试题--关于位结构体
- 关于测试一个接口的面试题
- 【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!
- 关于一个java "++" 语法的面试题的理解
- 一个关于fork()的面试题