Bonjour, je remercie par avance tous ceux qui s'intéresseront à mon problème.

Je fais un programme de clustering dans lequel je dois à un moment stocker des millions d'objets. Le classe de l'objet est Edge, voici la classe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
class Edge
{
	public:
		bool operator==(const Edge &other) const;
		Edge(std::string vertex1, std::string vertex2, int cost);
		size_t hash() const;
		std::string vertex1;
		std::string vertex2;
		unsigned int cost;
};
Voici le coeur du problème :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for(auto& vertex : vertices){  
		l++;
		for(size_t i(0); i < 24; i++){ // 
			for(size_t j(i); j < 24; j++){
				std::string v(vertex.first);
				if(i != j){
					flip_bit(v[i]); // permet de modifier le ième bit
					flip_bit(v[j]);
				}
				else
					flip_bit(v[i]);
				if(vertices.find(v)!= vertices.end()) {
					Edge e(vertex.first, v, compute_distance(vertex.first, v));
					std::cout << "coucou " << l << std::endl;
					graph.insert(e);
				}
			}
		}
	}
Mon problème est le suivant : il y a énormément d'objets à rajouter et la structure que j'ai choisie jusqu'ici : unordered_set est trop lente. Un ami à moi fait tourner le programme en moins de 1 min en python, moi ça m'en prends 30.

Si quelqu'un a une idée, merci de la partager.