|
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