提问人:Toàn Trần 提问时间:11/13/2023 最后编辑:Toàn Trần 更新时间:11/13/2023 访问量:81
C++:尝试引用已删除的函数 - int 的unordered_map
C++: Attempted to reference a deleted function - unordered_map for int
问:
我是 C++ 的新手,我正在尝试使用优先级队列实现 Dijkstra 的算法,找到源和目标之间的最短路径。我主要根据我的 Python 经验编写代码。但是我从文件中得到了这个错误:s
t
unordered_map
include
'std::_Uhash_compare<_Kty,_Hasher,_Keyeq>::_Uhash_compare(const std::_Uhash_compare<_Kty,_Hasher,_Keyeq> &)': attempting to reference a deleted function
错误来自这一行:
explicit _Umap_traits(const _Tr& _Traits) noexcept(is_nothrow_copy_constructible_v<_Tr>) : _Tr(_Traits) {}
这是我的代码:
#include <map>
#include <unordered_map>
#include <list>
#include <queue>
#include <iostream>
typedef std::pair<int, int> edge;
typedef std::unordered_map<edge, int> weights_map;
typedef std::map<int, std::list<int>> adjacents_map;
int Dijkstra(adjacents_map adjacents, weights_map weights, int s, int t) {
std::unordered_map<int, int> dist = {};
dist[s] = 0;
std::unordered_map<int, int> prev = {};
bool state = false;
int UNDEFINED = -1;
int big = 10000000;
auto cmp = [&dist](int u, int v) { return dist[u] < dist[v]; }; // error is probably
std::priority_queue<int, std::vector<int>, decltype(cmp)> Q(cmp); // from here
for (int i = 1; i < adjacents.size() + 1; ++i) {
if (i != s) {
dist[i] = big;
prev[i] = UNDEFINED;
}
}
Q.push(s);
while (!Q.empty() && !state) {
int u = Q.top();
Q.pop();
if (u == t) {
state = true;
}
for (auto const& v : adjacents[u]) {
int alt = dist[u] + weights[std::make_pair(u, v)];
if (alt < dist[v]) {
dist[v] = alt;
prev[v] = u;
Q.push(v);
}
}
}
return dist[t];
}
我尝试使用unordered_map注释掉某些部分,更改一些变量以映射,但错误仍然存在。我猜错误来自优先级队列声明部分。任何帮助将不胜感激。
答: 暂无答案
评论
std::pair
std::hash
std::map
std::unordered_map
std::hash
std::pair
unordered_map