কম্পিউটার টিউটোরিয়াল

সি++-এ টাইম বেসড কি-ভ্যালু স্টোর (Time Based Key-Value Store)


মান লেযিয়ে আমাদের একটি টাইম-বেসড কি-ভ্যালু স্টোর ক্লাস TimeMap বানাতে হবে, যা দুটি অপারেশন সাপোর্ট করে।

  • set(string key, string value, int timestamp): এটি কি, ভ্যালু এবং দिये गये টাইমস্ট্যাম্প স্ট্রোর করবে।

  • get(string key, int timestamp): এটি এমন একটি ভ্যালু রিটার্ন করবে যাতে set(key, value, timestamp_prev) আগে কল করা হয়েছে, যেখানে timestamp_prev <= timestamp।

যদি এমন একাধিক ভ্যালু থাকে, তখন সবচেয়ে বড় timestamp_prev वाला ভ্যালু রিটার্ন করতে হবে। যদি এমন কোনো ভ্যালু না থাকে, খালি স্ট্রিং ("") রিটার্ন করবে। নিচের মতো ফাংশন কল করলে - set("foo","bar",1), get("foo",1), get("foo",3), set("foo","bar2",4), get("foo",4), get("foo",5) - আউটপুট হবে: [null, "bar", "bar", null, "bar2", "bar2"]

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -

  • একটি ম্যাপ m সংজ্ঞায়িত করুন

  • set() মেথড হবে - m[key]-এ (timestamp, value) ইনসার্ট করুন

  • get() মেথড নিচের মতো কাজ করবে -

    • ret := খালি স্ট্রিং

    • v := m[key]

    • low := 0, high := v.size() - 1

    • যখন low <= high

      • mid := low + (high - low) / 2

      • যদি v[mid].first <= timestamp হয়, ret := v[mid].second এবং low := mid + 1

      • অন্যথায় high := mid - 1

    • ret রিটার্ন করুন

নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -

উদাহরণ

#include <bits/stdc++.h> using namespace std; class TimeMap {    public:    /** Initialize your data structure here. */    unordered_map <string, vector < pair <int, string> > > m;    TimeMap() {       m.clear();    }    void set(string key, string value, int timestamp) {       m[key].push_back({timestamp, value});    }    string get(string key, int timestamp) {       string ret = "";       vector <pair <int, string> >& v = m[key];       int low = 0;       int high = v.size() - 1;       while(low <= high){          int mid = low + (high - low) / 2;          if(v[mid].first <= timestamp){             ret = v[mid].second;             low = mid + 1;          }else{             high = mid - 1;          }       }       return ret;    } }; main(){    TimeMap ob;    (ob.set("foo","bar",1));    cout << (ob.get("foo", 1)) << endl;    cout << (ob.get("foo", 3)) << endl;    (ob.set("foo","bar2",4));    cout << (ob.get("foo", 4)) << endl;    cout << (ob.get("foo", 5)) << endl; }

ইনপুট

Initialize it then call set and get methods as follows: set("foo","bar",1)) get("foo", 1)) get("foo", 3)) set("foo","bar2",4)) get("foo", 4)) get("foo", 5))

আউটপুট

bar bar bar2 bar2

  1. সি/সি++-এ বারkeley-এর অ্যালগরিদম

  2. সি++-এ অবজেক্ট স্লাইসিং (Object Slicing)

  3. সি++-এ clock() ফাংশন ব্যবহার

  4. C++-এ সিস্টেম টাইম প্রিন্ট করা