У меня есть такая часть кода:
for (auto i = 0; i < WINDOW_SIZE; ++i) {
if (current == goal) break;
if (came_from.find(current) == came_from.end())
break;
next_best = came_from[current];
if (space_map[i].find(next_best) != space_map[i + 1].end()) {
auto search1 = space_map[i].find(current);
... ... ... ... ... ...
Где
1) space_map: std::vector<std::unordered_map<Node, Agent*>> (where Node and Agent are my onw classes.)
2) came_from: std::unordered_map<Node, Node>
3) current, goal: Node
4) WINDOW_SIZE: define, which equal 8
Есть список специализации hash_map для unordered_map и Node:
namespace std {
template <>
struct hash<Node> {
std::size_t operator()(const Node &n) const {
std::size_t const h1 = std::hash<std::size_t>{}(n.x);
std::size_t const h2 = std::hash<std::size_t>{}(n.y);
return (h1 ^ (h2 << 1));
}
};
} // namespace std
typedef struct Node {
uint x, y, f_score, g_score;
bool operator==(const Node &n) const { return (x == n.x && y == n.y); }
bool operator!=(const Node &n) const { return (x != n.x || y != n.y); }
friend std::ostream &operator<<(std::ostream &out, const Node &n) {
out << '[' << n.x << ", " << n.y << ']';
return (out);
}
} Node;
Когда я запускаю отладку, я получаю такую ошибку:
Я рассмотрел случай с WINDOW_SIZE - 1, возможно, это была ошибка переполнения. Но не та же ошибка. Я выяснил, что здесь происходит ошибка:
if (space_map[i].find(next_best) != space_map[i + 1].end())
Также у меня есть такое уведомление, что у меня есть "C26451: Арифметическое переполнение" с "+" здесь space_map[i + 1].end()
[i + 1]. Вероятно, это будет полезно. Может ли кто-нибудь объяснить мне, где я не прав?