作者yhn0tgb60 (呦厚厚)
看板C_and_CPP
标题Re: [STL ] map 会自动在最前面加空资料???
时间Sun Aug 23 16:07:30 2009
原谅我不用推文 用回文
因为真的很赶时间 怕用推文的大家看不到
请问一怎麽修改 map 里面的key和value
我主要是想把 map 阵列中的两个位置的内容互换
key和 value 都要互换
无法使用 [] 因为系统会再insert
也无法使用 iterator 因为那只是指标 而且又是const
星期一就要生成果 ~~~阿~~~没时间了
不好意思 麻烦大家了 谢谢
※ 引述《yhn0tgb60 (呦厚厚)》之铭言:
: 我刚刚试了一个方法
: map <DWORD, Node>::iterator buf;
: buf=closelist.begin();
: 用 buf来进行运算
: 但是假如我想取的是map第5个阵列值
: 我用 buf=closelist.begin()+5;
: complie不会过
: 难道我要 buf++; 5次吗???
: 请问有没有更有效率的办法
: find() 是搜寻key 但我现在要用的是取出阵列的某个位置
: 这有点不符合我的需求
: 麻烦大家了 谢谢
: ※ 引述《yhn0tgb60 (呦厚厚)》之铭言:
: : 我宣告了一个
: : STL的map 里面的资料是摆一个struct
: : 而我每加一笔资料到map里时
: : 会用minHeap排序 依照struct 里面的某个float 的大小排序
: : 可是当我在比较map中的某两个位置的 struct 中的某个float 的大小时
: : 系统却会常常会自动在我的map阵列的最前面加入两个或一个都是 0 的资料
: : 而且之後也不会自动删除
: : 以下是我的部份程式码
: : struct Node
: : {
: : int verID1;
: : int verID2;
: : float curCost;
: : float heuristic;
: : Node *parent;
: : };
: : inline DWORD GetKey( int verID1, int verID2 )
: : {
: : return ( MAKELONG( verID1, verID2 ));
: : }
: : inline int GetHeapParent( int i )
: : {
: : return ((i+1)/2-1);
: : }
: : map <DWORD, Node> closelist;
: : void Astar::InsertMinHeap( Node n)
: : {
: : closelist.insert( map< DWORD, Node>::
: : value_type( GetKey( n.verID1 ,n.verID2 ), n));
: : int curPose=closelist.size()-1;
: : while(TRUE)
: : {
: : int i=GetHeapParent( curPose );
: : if(i==-1)
: : break;
: : if((closelist[curPose].curCost+closelist[curPose].heuristic)<
: : (closelist[i].curCost+closelist[i].heuristic))
: : {
: : Node buf=closelist[curPose];
: : closelist[curPose]=closelist[i];
: : closelist[i]=buf;
: : curPose=i;
: : }
: : else
: : break;
: : }
: : }
: : 就是下面这两行
: : "" if((closelist[curPose].curCost+closelist[curPose].heuristic)<
: : (closelist[i].curCost+closelist[i].heuristic)) ""
: : 常常会都自动再帮我加两个或一个 资料都为0的map 而且加在最前面
: : 希望大家可以看的懂
: : 麻烦大家了 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 60.248.163.42
1F:推 zerodevil:key和value都换 = 没换 08/23 16:37
2F:→ yhn0tgb60:ㄟ 什麽意思阿 我的意思就是要改变阵列中的位置 08/23 16:45
3F:→ yhn0tgb60:为何会等於没换 08/23 16:46
4F:→ tinlans:map 不是阵列,它内部是 tree 结构。 08/23 16:54
5F:→ tinlans:它是 unordered 特性,所以也没有位置互换这回事。 08/23 16:56
6F:→ tinlans:把元素位置的概念套用在 map 上一开始就是一个错误。 08/23 16:57
7F:→ tinlans:如果真的需要用到位置,你应该自己做 associative array 08/23 17:00
8F:→ tinlans:,loki lib 里面有提供一份实作,你会用的话。 08/23 17:01
9F:→ tinlans:同时想要 map 搜寻速度和 vector 的随机存取性,可能就需 08/23 17:01
10F:→ tinlans:要使用 Boost.MultiIndex,但前提是你会安装 Boost。 08/23 17:01
11F:→ yhn0tgb60:搞到现在 我也觉得我的观念好像一开始就错了XD 唉~~ 08/23 17:02
12F:→ yhn0tgb60:谢谢了 08/23 17:02