关于C++ stl中set的问题

我们知道C++中set其实是红黑树,但如何访问他树的结点呢?比如:Treetr;tr.insert(1);tr.insert(3);tr.insert(5);tr.ins... 我们知道C++中set其实是红黑树,但如何访问他树的结点呢?
比如: Tree tr;
tr.insert(1);tr.insert(3);tr.insert(5);tr.insert(7);tr.insert(10);tr.insert(11);tr.insert(13);
我想查找这个集合中与8最接近的一个值,时间复杂度要求是log(n),应当怎么办?
node *p = tree.root;
int ans = p->value;
while(p!=NULL)
{
if(abs(8-ans)>abs(p->value-8))
ans = p->value;
if(8>p->value)p=p->right;
else if(8<p->value) p=p->left;
else printf("找到%d\n",p->value);
}
printf("集合中与%d最接近的数是%d\n",8,ans);

我的问题是,在C++中,如何使用set解决这样的问题
本问题悬赏50分,希望提交代码AC后再发上来,不要胡乱回答:
http://acm.dlut.edu.cn/problem.php?id=1091
展开
 我来答
jdergon
2012-03-15 · TA获得超过225个赞
知道小有建树答主
回答量:316
采纳率:0%
帮助的人:141万
展开全部
可以将set 转成vector,在用partical_sort排序,编写自己的函数对象。
代码如下:
struct distance
{
distance(int nDistance):disntance_(nDistance){};
bool operator()(int d1, int d2) const
{
return abs(d1 - distance_) > abs(d2 - distance_);
}
int distance_;
};
set<int> b;
vector<int> a(b.begin(), b.end());
partical_sort(a.begin(), a.beign() + 1, a.end(), distance(8));
a.begin() 就是离8最近的元素了。
匿名用户
2012-03-06
展开全部
网上查
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式