Domanda

Come posso cercare uno std :: unordered_set valore hash conoscere e avere qualche oggetto predicato? (Il predicato la determinazione di equivalenza da pred(x) && pred(y) significa x == y.)

È stato utile?

Soluzione

Bene, si poteva ignorare il valore hash e iterare l'intera unsorted_set testare il predicato. Non l'efficienza ideale, dal momento che si preferisce un secchio solo iterata, ma fa quello che chiedi.

unordered_set Standard possiede una begin(size_t) interfaccia per ottenere un iteratore per un particolare secchio (per numero), ed un bucket_count() interfaccia per ottenere il numero di secchi.

Gli oggetti con un dato hash sono garantiti a tutti appaiono nello stesso secchio, in modo che l'iterazione secchio testare il predicato è sufficiente per quello che si vuole fare.

Non posso davvero vedere nulla nello standard per garantire il secchio giusto per iterare è hash_value % bucket_count(). C'è una funzione per ottenere il secchio per un oggetto dato , ma non per ottenere il secchio per un dato valore hash . Provarlo sul vostro implementazione, però:. Penso che sia un'ipotesi ragionevole, e posso solo sono riusciti a trovare la restrizione fondamentale nello standard

In sintesi, penso che si desidera qualcosa di simile:

size_t bucket = hash_value % myset.bucket_count();
find_if(myset.begin(bucket), myset.end(bucket), pred);

, ma non sono sicuro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top