STL map find_if
来源:互联网 发布:胸肌锻炼方法 知乎 编辑:程序博客网 时间:2024/06/06 02:19
事出有因,今天刷leetcode的时候需要用到用一个map来记录每一个字母出现的下标映射。(Isomorphic Strings)
一开始考虑使用了:
map< char, vector<int> >
但是会遇到一个问题,就是map在存储元素的时候会自动调整内部的顺序,导致最后存储的字母的顺序变化,映射匹配的时候出错。
所以只能使用
vector< char, vector<int> >
但是这样的一个问题是没办法使用find(beg,end,val)去查找对应的char。
主要是自己对于find_if不熟悉,不会写find_if的判断函数
class vector_finder{public: vector_finder(const char ch):_ch(ch){} bool operator ()(const vector< pair< char,vector<int> > > ::value_type &value){ return value.first==_ch; } private: char _ch; };
auto it1=find_if(charIdxMap1.begin(),charIdxMap1.end(),vector_finder(s[i]));
使用find_if的时候需要一个xxx_finder class ,通过构造函数来初始化要查询匹配的value,然后重载 operator () 来实现在find_if中的调用。
注意重载函数的返回类型必须是bool类型.
说道这里,把自己的解决方法也给出来吧。
bool isIsomorphic(string s, string t) { vector<pair< char,vector<int> > > charIdxMap1; //字母及索引映射表,第一个元素存字母,第二个存下标 vector<pair< char,vector<int> > > charIdxMap2; for(size_t i=0;i<s.size();++i){ auto it1=find_if(charIdxMap1.begin(),charIdxMap1.end(),vector_finder(s[i])); auto it2=find_if(charIdxMap2.begin(),charIdxMap2.end(),vector_finder(t[i])); if(it1==charIdxMap1.end()){//如果是新的元素,插入 vector<int> ivec(1,i); charIdxMap1.push_back(make_pair(s[i],ivec)); } else{//如果不是新的元素 (*it1).second.push_back(i); } if(it2==charIdxMap2.end()){//如果是新的元素,插入 vector<int> ivec(1,i); charIdxMap2.push_back(make_pair(t[i],ivec)); } else{//如果不是新的元素 (*it2).second.push_back(i); } } auto it1=charIdxMap1.begin(); auto it2=charIdxMap2.begin(); //遍历映射表 for(;it1!=charIdxMap1.end(),it2!=charIdxMap2.end();it1++,it2++){ if( (*it1).second.size() != (*it2).second.size() ){ return false; } else{ for(size_t j=0;j<(*it1).second.size();++j){ int temp1=(*it1).second.at(j); int temp2=(*it2).second.at(j); if( temp1 != temp2){ return false; } } } } return true;}
1 0
- STL map find_if
- STL里vector/list/map使用find_if
- STL find_if
- stl find_if在map中查找元素的应用
- STL algorithm find_if
- (STL)for_each、find_if用法
- STL 之 find find_if
- STL for_each,find_if用法
- STL find_if使用(exam)
- STL的find_if函数
- STL中的find_if函数
- STL的find_if函数
- stl find和find_if
- STL中的find_if函数
- STL之find_if函数
- STL 之find & find_if
- STL(3) find_if函数
- STL find_if应用举例
- java中的抽象类
- 第一次作业:源代码计算器之目标一
- WebStorm技巧
- hadoop2的配置参数
- csdn
- STL map find_if
- 第12周上机实践项目4——点、圆的关系(2)
- Android TV 开发相关文章
- 第一次作业 目标1
- 黑马程序员-面向对象三大特性之封装
- iOS:各release版本的特性(持续更新)
- 分离字符串数字并计算其和
- 关于Android的TextView组件的ellipse属性的分析
- 装Ubuntu15.04的一些经验