#pragma once #include #include #include "IndexPQ.h" #include "IndexFlat.h" #include class IndexIVFPQ{ private: int d; int m;//bitquant int nbucket; //no of centroid int ntotal; //no of vector index bool trained=false; size_t nprobe;//how many voronoi i should look at IndexFlatL2 router; IndexPQ pq; std::vectorcoarse_centroids; std::vector>codes; std::vector>ids; public: IndexIVFPQ(int d, int nbucket, int m); void train(int n, const float *x, bool subsampling, int seed); void add(int n, const float *x, const uint64_t* xids); void search(int n, const float *query, int k, int nprobe, float* distances, int64_t* labels); };