关于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 展开
比如: 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 展开
展开全部
可以将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最近的元素了。
代码如下:
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
展开全部
网上查
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询