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
|
.vscode
|
||||||
build
|
build
|
||||||
|
.DS_Store
|
||||||
|
uwu2x-large.sql
|
||||||
|
uwu2x-large.db
|
||||||
@@ -28,7 +28,7 @@ FetchContent_MakeAvailable(sqlite3pp)
|
|||||||
|
|
||||||
file(GLOB SOURCES src/*.cpp)
|
file(GLOB SOURCES src/*.cpp)
|
||||||
add_executable(${PROJECT_NAME} ${SOURCES})
|
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
|
target_include_directories(${PROJECT_NAME} PUBLIC
|
||||||
include
|
include
|
||||||
${sqlite3pp_SOURCE_DIR}/headeronly_src
|
${sqlite3pp_SOURCE_DIR}/headeronly_src
|
||||||
|
|||||||
53
src/main.cpp
53
src/main.cpp
@@ -1,33 +1,60 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
|
||||||
#include "sqlite3pp.h"
|
#include "sqlite3pp.h"
|
||||||
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
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::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 r : q)
|
||||||
|
{
|
||||||
for (auto v : qry) {
|
std::string identifier, date;
|
||||||
string identifier;
|
r.getter() >> identifier >> date;
|
||||||
v.getter() >> identifier;
|
interactions.emplace_back(std::vector<std::string>{identifier, date});
|
||||||
identifiers.insert(identifier);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user