📄 compressor.cpp
字号:
#include "Compressor.h"
struct ltstr {
bool operator() (const size_t h1, const size_t h2) const {
return (h1 < h2);
}
};
void Compressor::doTemporalCompression() {
//cout << "size before temporal compression: " << recordList->size() << endl;
map<const size_t, vector<Record>* , ltstr> clusterMap;
hash<string> string_hash;
vector<Record>::iterator iter;
for (iter = recordList->begin(); iter != recordList->end(); iter++) {
Record r = *iter;
size_t h = string_hash(r.getLocation() + r.getJobId());
//cout << r << "; hash: " << h << endl;
map<const size_t, vector<Record>* , ltstr>::iterator curr = clusterMap.find(h);
if (curr != clusterMap.end()) {
vector<Record>* clusterList = (*curr).second;
vector<Record>::iterator clusterIter;
clusterIter = clusterList->end();
--clusterIter;
Record rec = *clusterIter;
if (abs(rec.getEventTime() - r.getEventTime()) > 300) {
clusterList->push_back(r);
}
} else {
vector<Record>* clusterList = new vector<Record>;
clusterList->push_back(r);
clusterMap[h] = clusterList;
}
}
//cout << "mapSize -> " << clusterMap.size() << endl;
recordList->clear();
int clusterSize = 0;
map<const size_t, vector<Record>* , ltstr>::iterator mapIter;
for (mapIter = clusterMap.begin(); mapIter != clusterMap.end(); mapIter++) {
vector<Record>* clusterList = (*mapIter).second;
clusterSize += clusterList->size();
for (iter = clusterList->begin(); iter != clusterList->end(); iter++) {
Record rec = *iter;
recordList->push_back(rec);
}
delete clusterList;
}
stable_sort(recordList->begin(), recordList->end());
//cout << "clusterSize -> " << clusterSize << endl;
//cout << "size after temporal compression: " << recordList->size() << endl;
};
void Compressor::doSpatialCompression() {
//cout << "size before spatial compression: " << recordList->size() << endl;
map<const size_t, vector<Record>* , ltstr> clusterMap;
hash<string> string_hash;
vector<Record>::iterator iter;
for (iter = recordList->begin(); iter != recordList->end(); iter++) {
Record r = *iter;
size_t h = string_hash(r.getEntryData() + r.getJobId());
//cout << r << "; hash: " << h << endl;
map<const size_t, vector<Record>* , ltstr>::iterator curr = clusterMap.find(h);
if (curr != clusterMap.end()) {
vector<Record>* clusterList = (*curr).second;
vector<Record>::iterator clusterIter;
clusterIter = clusterList->end();
--clusterIter;
Record rec = *clusterIter;
if (abs(rec.getEventTime() - r.getEventTime()) > 300) {
clusterList->push_back(r);
}
} else {
vector<Record>* clusterList = new vector<Record>;
clusterList->push_back(r);
clusterMap[h] = clusterList;
}
}
//cout << "mapSize -> " << clusterMap.size() << endl;
recordList->clear();
int clusterSize = 0;
map<const size_t, vector<Record>* , ltstr>::iterator mapIter;
for (mapIter = clusterMap.begin(); mapIter != clusterMap.end(); mapIter++) {
vector<Record>* clusterList = (*mapIter).second;
clusterSize += clusterList->size();
for (iter = clusterList->begin(); iter != clusterList->end(); iter++) {
Record rec = *iter;
recordList->push_back(rec);
}
delete clusterList;
}
stable_sort(recordList->begin(), recordList->end());
for (iter = recordList->begin(); iter != recordList->end(); iter++) {
cout << *iter << endl;
}
//cout << "clusterSize -> " << clusterSize << endl;
cout << "size after spatial compression: " << recordList->size() << endl;
//char ch; cin.get(ch);
};
void Compressor::compressList(vector<Record>* recordList) {
this->recordList = recordList;
doTemporalCompression();
doSpatialCompression();
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -