Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
262 views
in Technique[技术] by (71.8m points)

c++ - How do I implement a hash function with two keys or more?

I am currently working on data structures and algorithm semester project in C++. I want to implement a hash function to access a person's data using his name (string) and his phone number (integer). I also plan to handle collisions with open addressing (if this info is relevant). Also, I am not allowed to use any STL library functions.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

A general approach is to:

  1. Serialise the data into a stream of bytes.
  2. Create a std::string_view of the resulting byte buffer and use its hash

Efficient solution for the step 1. can be tricky to implement since C++ doesn't have standard way to serialise data. A trivial but non-optimal solution is to simply convert to a textual string in which case we don't need a string view either.

In your example, you could use:

std::string data = name + std::to_string(phone);
std::size_t hash = std::hash<std::string>{}(data);

By defining a general hash function, you could stream the bytes of individual objects separately without storing them first in a contiguous buffer.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...