Da Mike
Da Mike

Reputation: 463

Hash function result and bucket number in unordered_set

Suppose I have an std::unordered_set<T> mySet initialized with my own hash function hashFunc(T item). What I want to do is first insert some items into mySet, and then have a function search(T item) that takes an item, finds which bucket b it would go if it were to be inserted (but does not insert it) and finally returns all other items on bucket b. Can I calculate b like this?

b = hashFunc(item)

Is it guaranteed that b is gonna be the bucket I'm looking for? If not, what alternatives do I have?

Upvotes: 1

Views: 292

Answers (1)

Wander Nauta
Wander Nauta

Reputation: 19695

The bucket method on unordered_set takes a key and returns the bucket index that an element with that key would go into. For example:

#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";
}

on my implementation, prints

foo: 2
fox: 0
bat: 1

Once you have the bucket index, you would then iterate over the items in that bucket by calling the begin, end overloads that take a bucket index.

You shouldn't need to directly call your hash function.

Upvotes: 2

Related Questions