#include <generic/hashmap.mqh>
template < typename T>
class HashSet : public CHashMap<T, bool >
{
public :
HashSet( const T &arr[]):CHashMap( 10000 ) {
for ( int i= ArraySize (arr)- 1 ; i>= 0 ; --i)
this .Add(arr[i], true );
}
booloperator []( const T key) {
returnthis .ContainsKey(key);
}
};
int array_filter( int &a[], constint &f[])
{
int k = 0 ;
int x= ArraySize (a);
HashSet< int > d(f);
for ( int i= 0 ; i<x; i++)
if (!d[a[i]])
a[k++]=a[i];
returnArrayResize (a, k);
}
template < typename T>
int EraseRate(T &tArray[],T tRate){
int tCount= ArraySize (tArray),
tRes=tCount;
for ( int i= 0 ,ii= 0 ;i+ii<tCount;i++){
if (ii) tArray[i]=tArray[i+ii];
while (tArray[i]==tRate&&i+ii<tCount){
if (i+(++ii)<tCount) tArray[i]=tArray[i+ii];
tRes--;}}
return ( ArrayResize (tArray,tRes));}
함수가 보편화되기 위해서는 입력 데이터에 따라 선택된 여러 알고리즘을 결합해야 한다고 생각합니다.
틀림없이
마침내 빠른 해시 집합을 수행하는 방법을 찾았습니다.좋습니다. [13][12]와 같은 2차원 배열입니다. 나머지는 변경하지 않고 7번째 줄을 제거하는 방법은 무엇입니까?
이 같은
최적화 후.
약간의 코드 nicholi shen 수정
이제 문제의 조건을 충족하고 int 배열에서 작동합니다. 제 생각에는 필터 크기 F가 최소 6이 될 것이라는 사실을 고려하면 이것이 가장 빠른 옵션입니다.