ajout compter les utilisateurs actifs et nouveaux par jour
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,2 +1,5 @@
|
||||
.vscode
|
||||
build
|
||||
.DS_Store
|
||||
uwu2x-large.sql
|
||||
uwu2x-large.db
|
||||
@@ -28,7 +28,7 @@ FetchContent_MakeAvailable(sqlite3pp)
|
||||
|
||||
file(GLOB SOURCES src/*.cpp)
|
||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 14)
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES CXX_STANDARD 17)
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC
|
||||
include
|
||||
${sqlite3pp_SOURCE_DIR}/headeronly_src
|
||||
|
||||
53
src/main.cpp
53
src/main.cpp
@@ -1,33 +1,60 @@
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <chrono>
|
||||
|
||||
#include "sqlite3pp.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
int main(int argc, char const *argv[])
|
||||
{
|
||||
chrono::steady_clock::time_point begin = std::chrono::steady_clock::now();
|
||||
auto begin = std::chrono::steady_clock::now();
|
||||
|
||||
sqlite3pp::database db("../uwu2x.db");
|
||||
sqlite3pp::query q(db, "SELECT DISTINCT identifier, strftime('%Y-%m-%d', date) FROM interaction ORDER BY date ASC;");
|
||||
|
||||
sqlite3pp::query qry(db, "SELECT identifier FROM interaction;");
|
||||
std::vector<std::vector<std::string>> interactions;
|
||||
|
||||
set<string> identifiers;
|
||||
|
||||
for (auto v : qry) {
|
||||
string identifier;
|
||||
v.getter() >> identifier;
|
||||
identifiers.insert(identifier);
|
||||
for (auto r : q)
|
||||
{
|
||||
std::string identifier, date;
|
||||
r.getter() >> identifier >> date;
|
||||
interactions.emplace_back(std::vector<std::string>{identifier, date});
|
||||
}
|
||||
|
||||
cout << identifiers.size() << " users" << endl;
|
||||
std::cout << interactions.size() << std::endl;
|
||||
|
||||
std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
|
||||
std::set<std::string> identifiers;
|
||||
std::map<std::string, std::map<std::string, int>> activity;
|
||||
|
||||
cout << chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() << "ms elasped" << endl;
|
||||
for (size_t i = 0; i < interactions.size(); ++i)
|
||||
{
|
||||
const std::string &identifier = interactions[i][0];
|
||||
const std::string &date = interactions[i][1];
|
||||
|
||||
if (activity.find(date) == activity.end())
|
||||
{
|
||||
activity[date]["u"] = 0;
|
||||
activity[date]["n"] = 0;
|
||||
}
|
||||
|
||||
activity[date]["u"] += 1;
|
||||
if (identifiers.find(identifier) == identifiers.end())
|
||||
{
|
||||
activity[date]["n"] += 1;
|
||||
identifiers.insert(identifier);
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &[key, val] : activity)
|
||||
{
|
||||
std::cout << key << " : u=" << val.at("u") << " n=" << val.at("n") << std::endl;
|
||||
}
|
||||
|
||||
auto end = std::chrono::steady_clock::now();
|
||||
|
||||
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(end - begin).count() << "ms elapsed" << std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user