当前位置: 代码迷 >> 数据结构与算法 >> 对重载了比较函数的SET容器,怎么进行高效的查询
??详细解决方案

对重载了比较函数的SET容器,怎么进行高效的查询

热度:1207???发布时间:2016-05-23 09:14:33.0
对重载了比较函数的SET容器,如何进行高效的查询
我定义了一个结构体,将结构体的指针存储在SET容器中,并重载了SET的比较函数。
struct ? link_struct
{
? ? ? ? int ? link_id;
? ? ? ? int ? link_cost;
? ? ? ? ……
}
class ? link_compare
{
? ? ? ? public:
? ? ? ? bool ? link_compare::operator() ? (cost ? link_struct* ? first_link, ? cost ? link_struct* ? second_link)
? ? ? ? {
? ? ? ? ? ? ? ? return(first_link-> link_id ? < ? second_link-> link_id);
? ? ? ? }
}
std::set ? set_link;

这样可以将一个结构体存入在set容器,并按照我想要的方式排序。

但目前碰到一个问题,进行快速查找好像没有办法,如上例,在SET容器中是按照结构体中link_id进行排序,如果输入一个link_id,在set容器中快速查找不知道这么做了。


------解决方案--------------------
map为什么不能用于排序呢?
set需要的功能map也全部提供了呀?
map the_map;
the_map[s-> link_id]=s;
....

for(it=the_map.begin();it!=the_map.end();++it){
link_struct *p=it-> second;//Now visit all nodes in order
...
}
------解决方案--------------------
的确,如果考虑时间,mathe说的有理。

又想了想,其实用set实现好象也不困难。

只需要将查询语句上做点“手脚”:
std::set ::iterator it=set_link.find(id);
if(it!=set_link.end()){//Find
}

===>

link_struct temp;
temp.link_id=id;
std::set ::iterator it=set_link.find(&temp);
if(it!=set_link.end()){//Find
}

还需要重载link_struct*与link_struct*之间的比较运算 '== ', '!= ', ' < ', '> '(如果知道源码是如何实现的,就只需重载用到的就可以了,不必要全部重载)。


??相关解决方案
本站暂不开放注册!
内测阶段只得通过邀请码进行注册!
?
  • 最近登录:Sat Oct 19 13:51:24 CST 2019
  • 最近登录:Sat Oct 19 13:51:24 CST 2019
  • 最近登录:Sat Oct 19 13:51:24 CST 2019
  • 最近登录:Sat Oct 19 13:51:24 CST 2019
  • 最近登录:Sat Oct 19 13:51:24 CST 2019