मान लीजिए मेरे पास एक std::unordered_set<T> mySet है जो मेरे अपने हैश फ़ंक्शन hashFunc(T item) के साथ आरंभ किया गया है। मैं जो करना चाहता हूं वह पहले कुछ वस्तुओं को mySet में सम्मिलित करना है, और फिर एक फ़ंक्शन search(T item) है जो एक आइटम लेता है, यह पाता है कि कौन सी बाल्टी b डाली जाएगी < मजबूत>(लेकिन इसे सम्मिलित नहीं करता) और अंत में बकेट b पर अन्य सभी आइटम लौटाता है। क्या मैं इस तरह b की गणना कर सकता हूं?

b = hashFunc(item)

क्या यह गारंटी है कि b वह बाल्टी होगी जिसकी मुझे तलाश है? यदि नहीं, तो मेरे पास क्या विकल्प हैं?

0
Da Mike 7 अक्टूबर 2020, 14:55

1 उत्तर

सबसे बढ़िया उत्तर

unordered_set पर bucket विधि एक कुंजी लेती है और वापस लौट जाती है बकेट इंडेक्स कि उस कुंजी वाला एक तत्व अंदर जाएगा। उदाहरण के लिए:

#include <iostream>
#include <string>
#include <unordered_set>

int main() {
  std::unordered_set<std::string> x = {"foo", "bar", "baz"};

  std::cout << "foo: " << x.bucket("foo") << "\n";
  std::cout << "fox: " << x.bucket("fox") << "\n";
  std::cout << "bat: " << x.bucket("bat") << "\n";
}

मेरे कार्यान्वयन पर, प्रिंट

foo: 2
fox: 0
bat: 1

एक बार जब आपके पास बकेट इंडेक्स हो जाता है, तो आप शुरू करें, समाप्त करें ओवरलोड जो एक बाल्टी लेते हैं सूचकांक

आपको सीधे अपने हैश फ़ंक्शन को कॉल करने की आवश्यकता नहीं है।

1
Wander Nauta 7 अक्टूबर 2020, 15:16