|
8 | 8 | #include <unordered_set> |
9 | 9 | #include <list> |
10 | 10 |
|
| 11 | +#include <assert.h> |
11 | 12 |
|
12 | 13 | namespace hnswlib { |
13 | 14 | typedef unsigned int tableint; |
@@ -406,7 +407,7 @@ namespace hnswlib { |
406 | 407 | top_candidates.pop(); |
407 | 408 | } |
408 | 409 |
|
409 | | - tableint next_closest_entry_point = selectedNeighbors[0]; |
| 410 | + tableint next_closest_entry_point = selectedNeighbors.back(); |
410 | 411 |
|
411 | 412 | { |
412 | 413 | linklistsizeint *ll_cur; |
@@ -1156,24 +1157,19 @@ namespace hnswlib { |
1156 | 1157 | return result; |
1157 | 1158 | }; |
1158 | 1159 |
|
1159 | | - template <typename Comp> |
1160 | | - std::vector<std::pair<dist_t, labeltype>> |
1161 | | - searchKnn(const void* query_data, size_t k, Comp comp) { |
1162 | | - std::vector<std::pair<dist_t, labeltype>> result; |
1163 | | - if (cur_element_count == 0) return result; |
1164 | | - |
1165 | | - auto ret = searchKnn(query_data, k); |
1166 | | - |
1167 | | - while (!ret.empty()) { |
1168 | | - result.push_back(ret.top()); |
1169 | | - ret.pop(); |
| 1160 | + int searchKnn(const void* x, |
| 1161 | + int k, labeltype* labels, dist_t* dists = nullptr) const override { |
| 1162 | + if (labels == nullptr) return -1; |
| 1163 | + auto ret = searchKnn(x, k); |
| 1164 | + for (int i = k - 1; i >= 0; --i) { |
| 1165 | + if (dists) |
| 1166 | + dists[i] = ret.top().first; |
| 1167 | + labels[i] = ret.top().second; |
1170 | 1168 | } |
1171 | | - |
1172 | | - std::sort(result.begin(), result.end(), comp); |
1173 | | - |
1174 | | - return result; |
| 1169 | + return 0; |
1175 | 1170 | } |
1176 | 1171 |
|
| 1172 | + |
1177 | 1173 | void checkIntegrity(){ |
1178 | 1174 | int connections_checked=0; |
1179 | 1175 | std::vector <int > inbound_connections_num(cur_element_count,0); |
|
0 commit comments