std::vector<std::vector<size_t> > process_clustering(std::vector<imgptr> images) { std::vector<size_t> set1(images.size()); std::iota (std::begin(set1), std::end(set1), 0); distance_processor d; d.calculate_distances(images); std::vector<std::vector<size_t> > res1(cluster_set(set1, d)); std::vector<std::vector<size_t> > res2; for (std::vector<size_t>& r: res1) { auto rt = cluster_set(r, d); res2.insert(res2.end(), std::make_move_iterator(rt.begin()), std::make_move_iterator(rt.end())); } std::cout<<"clusters1 :" <<res1.size()<<" clusters2: "<<res2.size()<<"\n"; return res2; }
static GList * cluster_list (s4_resultset_t *set, xmms_fetch_spec_t *spec) { GHashTable *table; GList *list = NULL; table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); cluster_set (set, spec, table, &list); g_hash_table_destroy (table); return g_list_reverse (list); }
static GHashTable * cluster_dict (s4_resultset_t *set, xmms_fetch_spec_t *spec) { GHashTable *table; GList *list = NULL; table = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) s4_resultset_free); cluster_set (set, spec, table, &list); g_list_free (list); return table; }