求提高遍历速度方法

flydark 2008-02-28 10:18:34
在做寻路,问个问题
我有个三维点的数据结构RPoint,存放一个点的x、y、z三个坐标
用一个STL容器vector<RPoint*> list存放若干点的序列
寻路的时候我需要判断list序列里某点是否已经存在
如果从头开始遍历list的话,开销太大
自己想了几个办法,效果始终不是太理想
问问有什么思路,能够快速的在list里找到一个点
...全文
131 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
a013231 2008-02-28
  • 打赏
  • 举报
回复
假设RPoint定义为
struct RPoint
{
int x;
int y;
int z;
}

可以这样把它放到一个std::map里:
std::map<int,map<int,std::list<RPoint> > > R_map;
R_map[RPoint.x][RPoint.y].push_back(RPoint);

想知道一个坐标为x,y,z的RPoint是否存在就在R_map[x][y]里找就可以了.
ryfdizuo 2008-02-28
  • 打赏
  • 举报
回复

用一个标志数组int flag[MAX]={0}; 试一下,
执行vector <RPoint*> list的push_back的时候将相应的flag[i]=1;
通过flag里面的值是否为0判断,
注意映射的顺序,
sheenl 2008-02-28
  • 打赏
  • 举报
回复
排序算法当然只有自己来确定了, 如果排序了还搜索过慢的话, 貌似就没有什么好办法了。

考虑用一个hash表做缓冲, 先在缓冲区里找, 找不到再到容器里去找。设计排序算法, 尽量让附近的点存放再一起, 每次找到一个点, 就把附近的点全部读到缓冲区去, 因为附近的点很可能是很快就会被访问的点。
flydark 2008-02-28
  • 打赏
  • 举报
回复
排序的话,依照什么内容排序呢?
存放的是点坐标,即使按照x+y+z的值排序,结果还是不理想的
taodm 2008-02-28
  • 打赏
  • 举报
回复
那就不要用list。或者另外用map/排序vector为其作索引。
sheenl 2008-02-28
  • 打赏
  • 举报
回复
排序, 二分法搜索

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧