题解:
class TimeMap {
public:
/** Initialize your data structure here. */
TimeMap() {
_table.clear();
}
void set(string key, string value, int timestamp) {
_table[key].emplace_back(std::pair<int, string>(timestamp, value));
}
string get(string key, int timestamp) {
auto ite = _table.find(key);
if (ite == _table.end()) {
return "";
}
auto& arr = ite->second;
int left = 0;
int right = arr.size()-1;
while (left + 1 < right) {
int mid = left + (right-left)/2;
if (arr[mid].first == timestamp) {
return arr[mid].second;
} else if (arr[mid].first > timestamp) {
right = mid;
} else if (arr[mid].first < timestamp) {
left = mid;
}
}
if (arr[left].first == timestamp) {
return arr[left].second;
} else if (arr[right].first == timestamp) {
return arr[right].second;
} else if (arr[right].first < timestamp) {
return arr[right].second;
} else if (arr[left].first < timestamp) {
return arr[left].second;
}
return "";
}
private:
std::unordered_map<string, std::vector<std::pair<int, string>>> _table;
};
/**
* Your TimeMap object will be instantiated and called as such:
* TimeMap* obj = new TimeMap();
* obj->set(key,value,timestamp);
* string param_2 = obj->get(key,timestamp);
*/
class TimeMap {
public:
/** Initialize your data structure here. */
TimeMap() {
_table.clear();
}
void set(string key, string value, int timestamp) {
_table[key].emplace_back(std::pair<int, string>(timestamp, value));
}
string get(string key, int timestamp) {
auto ite = _table.find(key);
if (ite == _table.end()) {
return "";
}
std::pair<int, std::string> upper(timestamp, string({127}));
auto entry = upper_bound(ite->second.begin(), ite->second.end(), upper);
if (entry != ite->second.begin()) {
return (entry-1)->second;
}
return "";
}
private:
std::unordered_map<string, std::vector<std::pair<int, string>>> _table;
};
/**
* Your TimeMap object will be instantiated and called as such:
* TimeMap* obj = new TimeMap();
* obj->set(key,value,timestamp);
* string param_2 = obj->get(key,timestamp);
*/