Comment comparez-vous un hachis paré à un hachis non paré ?
Je pense qu'ils sont tous tronqués, bien que je doive dire tout de suite que je n'ai regardé le code que brièvement et il y a longtemps, donc je peux me tromper.
Je pense qu'ils sont tous coupés, même si je dois dire tout de suite que je n'ai jeté qu'un coup d'œil au code il y a longtemps, donc je peux me tromper.
Regardez le code pour ajouter un élément.
//+------------------------------------------------------------------+//| Insert the value with the specified key from the map. |//+------------------------------------------------------------------+
template<typename TKey,typename TValue>
bool CHashMap::Insert(TKey key,TValue value,constbool add)
{
if(m_capacity==0)
Initialize(0);
//--- get hash code from keyint hash_code=m_comparer.HashCode(key)&0x7FFFFFFF;int target_bucket=hash_code%m_capacity;
//--- collisions count in one bucket with different hashesint collision_count=0;
//--- search pair with specified keyfor(int i=m_buckets[target_bucket]; i>=0; i=m_entries[i].next)
{
//--- hash compare if(m_entries[i].hash_code!=hash_code)
{
collision_count++;
continue;
}
//--- value compare if(m_comparer.Equals(m_entries[i].key,key))
{
//--- adding duplicateif(add)
return(false);
m_entries[i].value=value;
return(true);
}
}
//--- check collisionif(collision_count>=m_collision_threshold)
{
int new_size=CPrimeGenerator::ExpandPrime(m_count);
Resize(new_size);
}
//--- calculate indexint index;
if(m_free_count>0)
{
index=m_free_list;
m_free_list=m_entries[index].next;
m_free_count--;
}
else
{
if(m_count==ArraySize(m_entries))
{
int new_size=CPrimeGenerator::ExpandPrime(m_count);
Resize(new_size);
target_bucket=hash_code%new_size;
}
index=m_count;
m_count++;
}
//--- set pairm_entries[index].hash_code=hash_code;
m_entries[index].next=m_buckets[target_bucket];
m_entries[index].key=key;
m_entries[index].value=value;
m_buckets[target_bucket]=index;
return(true);
}
Oui merci, il n'y en a pas qui ne soient pas rognés dans le code. C'est bizarre qu'ils n'aient pas fait le découpage dans la méthode HashCode elle-même. Apparemment, le calcul était destiné à éviter les erreurs (hachages personnalisés erronés).
void ReverseEnumerateAll(CList& list)
{
CObject* node = list.GetLastNode();
for(int i = list.Total()-1; node != NULL; i--, node = node.Prev())
printf("Element at " + (string)i);
}
Как работает этот код? На самом деле все просто. В функции EnumerateAll() в самом начале мы получаем ссылку на первый узел. Затем в цикле for мы печатаем порядковый узел этого узла
и переходим к следующему узлу командой node = node.Next(), не забывая при этом проитерировать текущий индекс элемента на единицу (i++). Перебор продолжается до тех пор, пока текущий
узел node не станет равен NULL, за это ответствен код во втором блоке for: node != NULL.
Аналогично работает реверсивная версия этой функции ReverseEnumerateAll() с той лишь разницей, что она вначале получает последний элемент списка CObject* node = list.GetLastNode().
В цикле for она получает не следующий, а предыдущий элемент списка node = node.Prev().
Si vous n'avez pas de compte, veuillez vous inscrire
Autorisez l'utilisation de cookies pour vous connecter au site Web MQL5.com.
Veuillez activer les paramètres nécessaires dans votre navigateur, sinon vous ne pourrez pas vous connecter.
Vous êtes connecté. L'authentification à deux facteurs a été désactivée. Configurez-la à nouveau et scannez un nouveau code QR, ou continuez avec l'authentification à deux facteurs désactivée.
Apparemment, vous ne voulez pas parler d'héritage, mais d'une enveloppe d'une classe sur une structure ?
Pourquoi le bit de signe est-il coupé ?
Pourquoi le bit de signe est-il coupé ?
le hash doit être positif car il agit comme un index dans le tableau
le hash doit être positif car il agit comme un index dans le tableau
uint ?
uint ?
n'a aucun sens
n'a aucun sens
La combinaison des lignes en surbrillance ne semble pas correcte
Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading
Bibliothèque de classes génériques - bogues, description, problèmes, cas d'utilisation et suggestions
fxsaber, 2018.06.11 20:04
Comment comparez-vous un hachis paré à un hachis non paré ?
Comment comparez-vous un hachis paré à un hachis non paré ?
Je pense qu'ils sont tous tronqués, bien que je doive dire tout de suite que je n'ai regardé le code que brièvement et il y a longtemps, donc je peux me tromper.
Regardez le code pour ajouter l'élément.
Je pense qu'ils sont tous coupés, même si je dois dire tout de suite que je n'ai jeté qu'un coup d'œil au code il y a longtemps, donc je peux me tromper.
Regardez le code pour ajouter un élément.
Oui merci, il n'y en a pas qui ne soient pas rognés dans le code. C'est bizarre qu'ils n'aient pas fait le découpage dans la méthode HashCode elle-même. Apparemment, le calcul était destiné à éviter les erreurs (hachages personnalisés erronés).
Désolé si cela s'est déjà produit. Je ne l'ai pas trouvé dans la documentation.
Y a-t-il une boucle sur l'itérateur Set-ups ?
Désolé si cela s'est déjà produit. Je ne l'ai pas trouvé dans la documentation.
Y a-t-il une boucle sur les réglages ?
Malheureusement, non.
Mais vous pouvez le mettre en œuvre vous-même.
Voir par exemple l'exemple de l'articleRECETTES MQL5 - RÉALISER UNE BASE DE DONNÉES MASSIVE OU MONDIALE ASSOCIÉE POUR UN ACCÈS RAPIDE AUX DONNÉES