获取存储在C++集中的结构中的值
Get values in a struct stored in C++ set
我声明了一个名为Position的结构,它有两个数据成员:x,y。我想将这些结构的实例存储到std::集中。以后如何从右侧的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;
我试图实现的是一个二维地图中实体的跟踪系统。每次实体移动时,它的当前位置都会记录到集合中,这样以后我就可以找到它去过的地方。
我通过每次它移动时调用这个来记录它的当前位置。
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
的使用没有太大区别,因为serach是线性的。您可以通过检查insert
:的返回值来确定您插入的项目是否是没有循环的新项目
if (!m_visited.insert(Position(CorX(),CorY())).second) {
// Position at { CorX(), CorY() } has been visited
}
如果您插入的项是新项,则set::insert
将第二个成员设置为true
的pair
返回;如果集合中已存在另一个具有相同数据的项,则返回false
。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 访问内联程序集中的 C 结构成员
- 使用结构参数从程序集中调用C++函数
- 在并集中命名数组元素或结构和数组
- C++并集中的命名结构
- 获取存储在C++集中的结构中的值