30/09/2018, 16:14

Cách sử dụng template để xử lý dữ liệu chưa biết kiểu?

Hiện em đang làm bài tập về bảng băm và cần sử dụng template trong C++ để có thể thực hiện được hàm băm. Ở điều kiện đầu vào có một tham số chưa xác định kiểu, có thể là chuỗi hoặc cũng có thể là số.

Đây là đề bài cụ thể:

Sử dụng hàm băm D.knuth có dạng là m*((k*a)mod 1) : trong đó m là số slot của bảng băm, k là khóa, a là 1 hằng số.

Trong đó khóa k chưa xác định, có thể là chuỗi hoặc số, hoặc kiểu dữ liệu khác

Em bị vướng ở chỗ, khi khóa có kiểu dữ liệu chưa xác đinh. thì làm sao để viết được hàm băm?

Code của em đang viết ở đây:

Nguyễn Minh Dũng viết 18:18 ngày 30/09/2018

Em đưa thông tin cụ thể hơn đi, anh học bảng băm chắc cũng 5-6 năm rồi, giờ chả nhớ gì đâu…

Nguyễn Ngọc Cương viết 18:16 ngày 30/09/2018

anh học bảng băm chắc cũng 5-6 năm rồi

dạ ! đây là bài tập về nhà môn cấu trúc dữ liệu của em. thầy yêu cầu là sử dụng hàm băm D.knuth
có dạng là m*((k*a)mod 1) : trong đó m là số slot của bảng băm, k là khóa, a là 1 hằng số .
vấn đề của em năm ở chỗ : khi xây dựng template của bảng băm (hashtable) kiểu dữ liệu của khóa k là chưa xác định (có thể là số , hoặc chuỗi , …) thì em không biết phải viết hàm băm như thế nào từ 1 kiểu dữ liệu chưa xác định của khóa để có thể return lại được vị trí trên hashtable .

Nguyễn Minh Dũng viết 18:20 ngày 30/09/2018

m là số slot của bảng băm

Có phải là số phần từ của bảng băm không? Anh học lâu quên.

k là khóa

Khóa này là số hay là chuỗi?

khi xây dựng template của bảng băm

Cho anh coi thử cái template như thế nào.

kiểu dữ liệu của khóa k là chưa xác định (có thể là số , hoặc chuỗi , …)

À anh hiểu rồi.

Trước hết em xem gửi code em làm lên. Em có thể xem qua mẫu template ở đây.

Continuing the discussion from Tổng Hợp C,C++: Hỗ trợ giải tất cả các bài tập C & C++: Tạm thời post thế này đã, có gì sửa sau. @oanh Có gì thắc mắc cứ hỏi ở đây, tối a có thời gian sẽ lên giải thích. Giờ bận tí. #include <iostream> template<class T> class Number { private: T m_data; public: Number(void) : m_data( T() ) {} Number(const T value) : m_data ( value ) {} ~Number(void) {} Number<T>& operator =(const Number<T> & value) { m_data = value…
Ở đây anh làm ví dụ về operator+ #include <iostream> class SoDacBiet { public: SoDacBiet(int giatri) : _giatri(giatri) // khởi tạo giá trị cho _giatri = giatri {} ~SoDacBiet() {} int operator+(const SoDacBiet& soKhac) // ở đây trả về int, trong trường hợp khác phải trả về kiểu phù hợp { return _giatri + soKhac._giatri; } friend std::ostream& operator<<(std::ostream& out, const SoDacBiet& soDacBiet) // ví dụ về << { out << soDacBiet._giatri…
Dũng Kon viết 18:25 ngày 30/09/2018

chú cương dạo này có cố gắng lắm

viết 18:16 ngày 30/09/2018

anh học bảng băm chắc cũng 5-6 năm rồi, giờ chả nhớ gì đâu…

Em đọc lướt qua phần bảng băm xong thấy hiểu là quên luôn chứ đừng nói là 5 năm

Nguyễn Minh Dũng viết 18:20 ngày 30/09/2018

Em đọc lướt qua phần bảng băm xong thấy hiểu là quên luôn chứ đừng nói là 5 năm

Á à, @minh_vu_03 muốn đi theo thuật toán / giải thuật thì phải nhớ chứ không được quên đâu nhé. Anh quên là anh quên thuật ngữ “việt hóa” thôi chứ còn bản chất thì vẫn nhớ nhé. :trollface:

viết 18:20 ngày 30/09/2018

Bảng băm dễ hiểu mà, khi nào quên thì coi cuốn từ điển nó như thế nào thì bảng băm nó như thế ấy thôi.

Bài liên quan
0