1、
这道题true false的使用
return mp[x] > mp[y];和这句意思是一样的
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
unordered_map<int,int>mp;
for(int i=0;i<arr2.size();i++){
mp[arr2[i]] = i+1;
}
sort(arr1.begin(), arr1.end(), [&](int x,int y){
if(mp[x] !=0 && mp[y] != 0)
return mp[x] < mp[y];
else if(mp[x] ==0 && mp[y] != 0)
return false;
else if(mp[x] !=0 && mp[y] == 0)
return true;
else
return x < y;
});
return arr1;
}
};
/
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
unordered_map<int,int>mp;
for(int i=0;i<arr2.size();i++){
mp[arr2[i]] = i+1;
}
sort(arr1.begin(), arr1.end(), [&](int x,int y){
if(mp[x] !=0 && mp[y] != 0)
return mp[x] < mp[y];
else if(mp[x] ==0 && mp[y] != 0)
return mp[x] > mp[y];
else if(mp[x] !=0 && mp[y] == 0)
return mp[x] > mp[y];
else
return x < y;
});
return arr1;
}
但是发现使用count的话会出现问题就是我只能返回true false 。。。。return mp[x] > mp[y];结果会出问题,mp[x]会被默认,再用count就会变成1,cmp函数被反复调用的过程中就会访问下标导致count为1
#include <iostream>
#include <map>
#include <unordered_map>
using namespace std;
class Functor {
private:
int id = 0;
public:
void operator() () {
cout << "id = " << id << endl;
++id;
}
};
int main()
{
//Functor f;
//
//f();
//f();
unordered_map<int, int>mp;
for (int i = 0; i < 10; i++)
{
mp[i] = i+10;
}
cout << mp.count(11);
cout << mp[11];
cout << mp.count(11);
}
输出001
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
unordered_map<int,int>mp;
for(int i = 0; i < arr2.size(); i++)
{
mp[arr2[i]] = i;
}
sort(arr1.begin(),arr1.end(),[&](int x,int y)
{
if(mp.count(x)&&mp.count(y))
{
return mp[x] < mp[y];
}
else if((!mp.count(x))&&mp.count(y))
{
return mp[x] > mp[y];
// return false;
}
else if(mp.count(x)&&(!mp.count(y)))
{
return mp[x] > mp[y];//x在里面y没有,按照x在前y在后
//return true;
}
else
return x < y;
});
return arr1;
}
};