gpt4 book ai didi

c++ - 获取存储在 C++ 集合中的结构中的值

转载 作者:行者123 更新时间:2023-11-28 06:56:20 26 4
gpt4 key购买 nike

我声明了一个名为 Position 的结构,其中包含 2 个数据成员:x、y。我想将这些结构的实例存储到 std::set 中。以后如何从正确的 Position 结构中检索 x、y 的值?

struct Position
{
long m_x;
long m_y;
Position(long x, long y) : m_x(x), m_y(y) {}
}

std::set<Position> m_visited;

我要实现的是二维 map 中实体的跟踪系统。每次实体移动时,它的当前位置都会被记录到集合中,以便以后我可以找出它去过的地方。

每次它移动时我都会调用它来记录它的当前位置。

m_visited.insert(Position(CorX(),CorY());

然后,我想看看我的实体将要访问的新单元格是否已被访问过。如果是,那么我会告诉实体选择其他细胞来做某事,方法是说类似的话

for (set<Position>:iterator i = m_visited.begin(); i != m_visited.end(); i++)
{
if ([X cor of next cell] != [X cor of a visited cell] && [Y cor of next cell] != [Y cor of a visited cell])
{
do something
}
}

问题是我不知道如何找到具有要比较的正确数据的正确单元格。对不起,如果这听起来真的很困惑

最佳答案

迭代器 i 可以像指向 Position 的指针一样使用,所以你可以这样写

Position visited = ...
for (set<Position>:iterator i = m_visited.begin(); i != m_visited.end(); i++) {
if (i->m_x == visited.m_x && i->m_y == visited.m_y) {
... // Been there before
}
}

但是,set 的使用与 list 的使用没有太大区别,因为搜索是线性的。你可以通过检查insert的返回值来判断你插入的item是否是一个新的没有循环的item:

if (!m_visited.insert(Position(CorX(),CorY())).second) {
// Position at { CorX(), CorY() } has been visited
}

set::insert 返回一个 pair,如果您插入的项目是新的,则第二个成员设置为 true,如果集合中已存在具有相同数据的另一项,则为 false

关于c++ - 获取存储在 C++ 集合中的结构中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23129759/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com